Довольно часто разработчики сталкиваются с ситуацией: при запуске сеанса в режиме отладки клиентский код успешно проходит по точкам останова, но как только управление передается серверной процедуре или функции, выполнение не прерывается. При этом на самом сервере через подключение по RDP отладка может функционировать исправно. Проанализируем, почему возникает такое поведение, как устроена серверная отладка в платформе 1С и что нужно настроить для ее стабильной работы с рабочего места программиста.
Рассмотрим стандартный фрагмент кода управляемой формы внешней обработки, где клиент вызывает контекст сервера:
&НаКлиенте
Процедура Команда1(Команда)
Сообщить("это клиент ");
командаСервер();
КонецПроцедуры
&НаСервере
Процедура командаСервер()
Сообщить("это сервер ");
КонецПроцедуры
Если точка останова установлена внутри процедуры командаСервер(), но управление в нее не заходит, хотя само сообщение в окно сообщений успешно выводится, это означает, что серверный предмет отладки не подключен к Конфигуратору либо сетевой трафик между рабочим местом и сервером приложений блокируется.
Для того чтобы сервер приложений 1С в принципе мог обрабатывать отладку, его служба должна быть запущена со специальным ключом. Выясним, как это проверить и настроить в реестре Windows:
regedit на машине, где установлен сервер 1С.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services и найдем службу агента сервера (например, 1C:Enterprise 8.2 Server Agent).ImagePath. Ключ -debug должен обязательно присутствовать среди параметров запуска.-debug перед параметром -d, так как путь к каталогу служебных файлов, идущий после флага -d, должен быть отдельным аргументом:Пример корректной строки запуска:
"C:\Program Files\1cv82\8.2.19.90\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv82\srvinfo"
Важно: любые изменения в реестре вступают в силу только после полного перезапуска службы сервера «1С:Предприятия». Если изменить параметр, но не перезапустить службу, отладка на сервере работать не будет.
Если при входе на сервер по RDP и запуске Конфигуратора локально точки останова отрабатывают, а на рабочей станции программиста — нет, причина кроется в сетевой архитектуре протокола отладки.
В протоколе TCP-отладки клиент-серверной 1С серверный рабочий процесс rphost сам инициирует обратное TCP-соединение к компьютеру разработчика, на котором запущен Конфигуратор. Для этого сервер обращается к клиентской машине по ее сетевому имени (DNS/NetBIOS). Если обратное соединение установить не удается, серверный предмет отладки не может передать состояние Конфигуратору.
Разберем основные причины сбоя сетевого взаимодействия:
rphost подключается к Конфигуратору извне, брандмауэр Windows или сторонний антивирус на компьютере разработчика может блокировать входящие пакеты. Необходимо создать входящее правило брандмауэра для исполняемого файла 1cv8.exe на компьютере программиста.hosts на сервере (каталог C:\Windows\System32\drivers\etc\hosts). Аналогично добавим имя и IP-адрес сервера в файл hosts на машине разработчика.Иногда серверный предмет отладки просто не захватывается Конфигуратором автоматически при переходе контекста. Проверим настройки в самом Конфигураторе:
Если код выполняется внутри внешнего отчета или обработки (файл с расширением .epf), важно помнить о правилах синхронизации:
Следуя этим шагам и проверив в первую очередь сетевой доступ сервера к клиентской машине, брандмауэры и флаг автоматического подключения на сервере, мы сможем восстановить работу точек останова на удаленном рабочем месте.