Проблема отладки кода, выполняемого в фоновых заданиях, является одной из самых распространенных задач для разработчика 1С. Часто возникают ситуации, когда все настройки в конфигураторе вроде бы выставлены верно, но точки останова упорно игнорируются системой. Рассмотрим подробно, как обеспечить стабильное подключение отладчика к серверным процессам и фоновым заданиям, проанализируем возможные препятствия и разберем по шагам алгоритм настройки системы.
Разберем первоочередное условие: сервер 1С:Предприятие по умолчанию запускается в режиме, который не предполагает отладку. Даже если вы установите все флаги в конфигураторе, отладка не заработает, пока сам сервер не будет переведен в соответствующий режим. Выясним причину, по которой служба может игнорировать ваши запросы.
Для включения этого режима необходимо добавить ключ -debug в параметры запуска службы сервера 1С. Проанализируем последовательность действий:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (название может незначительно отличаться в зависимости от версии платформы).ImagePath.-debug.services.msc.Важный нюанс: Если вы используете HTTP-отладку (доступна в более новых версиях платформы), ключ может выглядеть иначе, например, -debug -http. Однако для классического TCP-протокола достаточно простого -debug.
Рассмотрим ситуацию, когда сервер уже находится в режиме отладки, но фоновое задание "пролетает" мимо конфигуратора. Это происходит потому, что отладчик должен знать, какие именно типы соединений ему нужно перехватывать. Проверим настройки в самом конфигураторе.
Зайдем в меню Отладка — Подключение.... В открывшемся окне нажмем кнопку Автоматическое подключение.... Убедимся, что установлены флажки напротив следующих пунктов:
Теперь проанализируем настройки в меню Сервис — Параметры — Запуск 1С:Предприятия — Дополнительно. Здесь должны быть установлены галочки Устанавливать режим отладки и Использовать отладку при запуске. Обратите внимание на поле Адрес отладчика. В некоторых случаях автоматическое определение IP-адреса работает некорректно, особенно если на компьютере несколько сетевых интерфейсов или активен VPN. Попробуйте явно прописать IP-адрес вашего компьютера.
Если стандартные методы не помогают, разберем более глубокий уровень настройки через файл debugcfg.xml. Этот файл позволяет принудительно указать серверу параметры отладки. Выясним, где он должен располагаться и что в нем писать.
Файл должен находиться в папке conf установленной платформы. Обратите внимание на разрядность сервера: для 64-битной версии путь обычно C:\Program Files\1cv8\conf, для 32-битной — C:\Program Files (x86)\1cv8\conf.
Пример содержания файла для принудительного включения отладки по протоколу TCP:
<config xmlns="http://v8.1c.ru/8.2/config/debugcfg">
<debugportrange start="1560" end="1591" />
<protocol inline="true">tcp</protocol>
</config>
После создания или изменения этого файла перезапуск сервера обязателен.
Проанализируем ситуацию с точки зрения системного администрирования. При TCP-отладке сервер 1С должен иметь возможность "постучаться" на компьютер разработчика. Это означает, что входящие соединения на порты отладки (обычно диапазон 1560–1591) должны быть разрешены в брандмауэре Windows (Firewall) на вашем локальном компьютере, а не только на сервере.
Если между вами и сервером стоит корпоративный фаервол, необходимо убедиться, что трафик по этим портам разрешен в обе стороны. Посмотрим на список стандартных портов: 1540 (менеджер кластера), 1541 (порт по умолчанию), 1560–1591 (диапазон портов отладки). Если вы видите в консоли администрирования порты типа 1562, значит система активно использует этот диапазон.
Иногда фоновое задание выполняется настолько быстро, что отладчик просто не успевает инициализировать сессию. Выясним, как "поймать" такое задание вручную. Мы можем добавить в начало процедуры фонового задания специальный код, который заставит его подождать нас.
Рассмотрим пример кода:
Процедура МоеФоновоеЗадание()
// Временный код для отладки
ИмяФайлаФлага = "C:\temp\stop_debug.txt";
Пока ФС.СуществуетФайл(ИмяФайлаФлага) Цикл
// Сервер будет "висеть" здесь, пока файл существует
// Это даст нам время подключиться вручную через Отладка - Подключение
КонецЦикла;
// Далее основной код задания
ПроанализируемДанные();
КонецПроцедуры
Пока файл существует, задание будет находиться в цикле. Мы заходим в конфигуратор, открываем меню Отладка — Подключение, находим наше фоновое задание в списке Доступные предметы отладки, нажимаем Подключить. После этого удаляем файл stop_debug.txt, и выполнение кода переходит к вашим точкам останова.
Фоновые задания исполняются в процессах rphost.exe. Если на сервере настроено много рабочих процессов, отладка может вести себя нестабильно, так как конфигуратор "теряет" связь при переключении задания между процессами. Для целей отладки на тестовом сервере рекомендуется временно ограничить количество рабочих процессов до одного. Это гарантирует, что и конфигуратор, и фоновое задание будут взаимодействовать в рамках одного системного процесса rphost.
Резюмируем: Для успешной отладки фонового задания нам необходимо:
-debug.1560-1591 на локальной машине.debugcfg.xml.