При разработке сложных решений на платформе 1С:Предприятие мы часто сталкиваемся с ситуацией, когда точки останова (breakpoints), установленные в серверных модулях, игнорируются программой. Код выполняется, но отладчик не перехватывает управление. В файловом варианте базы данных такой проблемы обычно не возникает, однако в клиент-серверной архитектуре это стандартное поведение системы "из коробки".
Разберем детально, почему так происходит, и рассмотрим пошаговый алгоритм включения отладки на сервере 1С. Мы проанализируем настройки службы агента сервера, работу с реестром Windows и нюансы сетевого взаимодействия.
В клиент-серверном варианте код исполняется в разных контекстах. Клиентская часть работает на компьютере пользователя, а серверная — на выделенном сервере приложений. По умолчанию, служба агента сервера 1С (ragent) запускается в режиме, оптимизированном для производительности, где механизмы отладки отключены в целях безопасности и экономии ресурсов. Если включить режим отладки на сервере невозможно, для анализа данных под пользователем можно использовать расширение для отладки запросов и СКД при выключенной отладке на сервере.
Чтобы заставить сервер "общаться" с отладчиком конфигуратора, нам необходимо принудительно запустить службу сервера с специальным ключом. Рассмотрим, как это сделать правильно.
Перед внесением любых изменений в реестр или настройки, нам необходимо остановить работу сервера 1С. Убедимся, что все пользователи вышли из системы, так как остановка службы прервет все активные сеансы.
Откроем консоль управления службами (services.msc), найдем службу, которая обычно называется Агент сервера 1С:Предприятие 8.3 (или схожим образом, в зависимости от версии), и выполним её остановку.
Самый надежный способ включить отладку — отредактировать строку запуска службы в системном реестре. Нам потребуется добавить ключ -debug.
Запустим редактор реестра (команда regedit) и перейдем в следующую ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent
Обратите внимание: имя ветки может отличаться (например, содержать суффикс версии, если установлено несколько платформ, например 1C:Enterprise 8.3.22.1709 Server Agent).
Найдем параметр ImagePath. Он содержит строку запуска исполняемого файла. Нам нужно аккуратно отредактировать это значение, добавив ключ -debug перед другими параметрами, но после пути к исполняемому файлу.
Посмотрим на пример того, как строка выглядит ДО изменений:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Теперь отредактируем строку, добавив ключ -debug. Строка ПОСЛЕ изменений должна выглядеть так:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"
Важно: Ключ -debug включает отладку по протоколу TCP/IP. В новых версиях платформы (начиная с 8.3.8 и особенно в последних релизах) появился механизм отладки по протоколу HTTP. Для его включения используется ключ -http. Однако классический -debug остается универсальным решением для большинства задач внутренней сети.
Если мы планируем также отлаживать фоновые задания или COM-соединения, проверим наличие соответствующих флагов, хотя обычно ключа -debug достаточно для глобального включения режима.
После внесения изменений в реестр, вернемся в консоль служб и запустим Агент сервера 1С:Предприятие. Если служба стартовала успешно, значит синтаксис команды в реестре не нарушен.
Теперь перейдем в Конфигуратор. Для того чтобы отладка заработала, нам необходимо убедиться, что в настройках самого Конфигуратора разрешена отладка.
Кроме того, проверим настройки подключения отладчика: меню Отладка -> Подключение. В списке "Предметы отладки" мы должны увидеть процессы сервера (обычно они отображаются с именем сервера и типом "Сервер"). Если сервер в списке появился, значит, настройка реестра прошла успешно.
Даже если мы включили режим отладки, процесс может блокироваться сетевым экраном Windows или сторонним антивирусом. Отладчик и сервер обмениваются данными по определенным портам.
Проанализируем диапазоны портов. Стандартно агент сервера использует диапазоны, указанные в параметре -range (по умолчанию 1560:1591). Нам необходимо создать правило во входящих подключениях Брандмауэра Windows, разрешающее активность по этим портам, а также для процессов ragent.exe, rmngr.exe и rphost.exe.
Если отладка не подключается (точки останова серые, со знаком вопроса или просто игнорируются), попробуем временно отключить Брандмауэр для диагностики. Если это помогло, значит проблема именно в закрытых портах, и нужно настроить разрешающие правила.
В последних версиях платформы 1С (8.3.20 и выше) механизм отладки претерпел изменения. Система все чаще требует явного указания протокола. Если классический способ с -debug не работает, рассмотрим вариант с использованием протокола HTTP.
Для этого вместо -debug в реестре пропишем ключ:
-debug -http
Это переключит сервер отладки на использование HTTP-протокола. В этом случае нам также нужно будет проверить настройки в Конфигураторе: Сервис -> Параметры -> Отладка. Убедимся, что там выбран протокол HTTP (или "Автоматически").
Часто программисты сталкиваются с тем, что серверная отладка работает при интерактивных действиях, но не останавливается в фоновых заданиях (регламентные операции, отложенное проведение). Чтобы "поймать" фоновое задание, выполним следующие действия:
Теперь при старте любого фонового задания отладчик автоматически подключится к нему, и, если в коде есть точка останова, выполнение прервется.
Если мы не хотим править реестр вручную (что всегда несет определенные риски), мы можем воспользоваться командной строкой Windows для изменения параметров службы. Запустим командную строку (cmd) от имени администратора и воспользуемся командой sc.
Пример команды для изменения пути (будьте предельно внимательны с путями, они должны соответствовать вашей установке):
sc config "1C:Enterprise 8.3 Server Agent" binPath= "\"C:\Program Files\1cv8\8.3.xx.xxxx\bin\ragent.exe\" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d \"C:\Program Files\1cv8\srvinfo\""
Однако метод с реестром (regedit) считается более наглядным и безопасным для новичков, так как позволяет визуально проконтролировать итоговую строку перед сохранением.
Мы рассмотрели основной алгоритм настройки серверной отладки. Подведем краткий итог:
Для успешной отладки нам необходимо:
-debug (или -http для новых версий) в параметры запуска службы через реестр.Следуя этим шагам, мы обеспечим полноценный контроль над исполнением кода как на клиенте, так и на сервере.