В процессе разработки разработчики часто сталкиваются с ситуацией, когда точка останова в процедуре с директивой &НаКлиенте отрабатывает корректно, но при переходе к вызову серверной процедуры с директивой &НаСервере отладчик просто проскакивает её без остановки.
Рассмотрим пример кода, в котором возникает подобная проблема:
&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ПроцедураНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПроцедураНаСервере()
ААА = 1;
КонецПроцедуры
Проанализируем основные причины такого поведения отладчика и разберем по шагам, как настроить систему для выполнения серверной отладки.
Главная причина, по которой клиентский код останавливается, а серверный — нет, заключается в устройстве режима отладки 1С:Предприятие. Для отладки клиентского приложения никаких дополнительных ключей запуска службы не требуется, поэтому точка останова в клиент процедурах срабатывает сразу. Для отладки серверного кода служба агента сервера 1С:Предприятие (ragent.exe) должна быть запущен с явным разрешением отладки (ключ -debug).
Разберем, как включить отладку на сервере 1С:
Откроем реестр Windows (команда regedit) и перейдем в ветку службы агента сервера 1С (например, HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent...). В параметре ImagePath необходимо добавить ключ -debug к исполняемому файлу ragent.exe. После редактирования параметров реестра обязательно перезапустим службу сервера 1С.
Откроем конфигурационный файл службы (например, /etc/sysconfig/srv1cv83 или /etc/init.d/srv1cv83), найдем и раскомментируем строку с параметром SRV1CV8_DEBUG=1. После этого перезапустим службу srv1cv83.
Выясним еще одну частую причину, с которой сталкиваются разработчики в распределенных или многосерверных окружениях. Если в строке подключения базы или в настройках кластера указано несколько рабочих серверов (например, для отказоустойчивости), а один из серверов остановлен или на нем не включен режим отладки, серверные вызовы могут адресоваться на недоступный для отладчика узловой процесс.
Решение: выявим незадействованные или отключенные серверы в строке подключения к информационной базе и удалим их, оставив только актуальный адрес сервера 1С, на котором активен ключ -debug.
Даже при включенном ключе отладки на сервере, Конфигуратор может не подключаться к серверным предметам отладки автоматически.
Проверим настройки подключения в Конфигураторе:
Посмотрим на сетевую составляющую. При использовании стандартного TCP-протокола отладки рабочий процесс сервера 1С (rphost) пытается установить обратное сетевое соединение с компьютером разработчика (где запущен 1cv8.exe). Если на ПК разработчика включен брандмауэр Windows или закрыты входящие порты, клиентский код остановится, а серверный обратный вызов будет заблокирован.
Для решения сетевых проблем рекомендуется использовать протокол **HTTP** для отладки (запуск службы `dbgs` с параметром `-http`), либо добавить исключения в брандмауэр для процесса Конфигуратора.