К статье
Практический материал

Администрирование · 11 мин

Серверная отладка 1С: как включить и настроить

Как включить серверную отладку 1С: параметр debug для службы агента сервера, настройка конфигуратора, проверка подключения и типичные ошибки.

Серверная отладка в 1С нужна, когда точка останова расположена в серверном коде — в модуле менеджера объекта, общем серверном модуле или процедуре с директивой компиляции «НаСервере». Без включённой отладки на сервере конфигуратор проходит мимо таких точек, и разработчик видит только клиентскую часть выполнения. Проблема решается одним параметром запуска службы агента сервера 1С, но на практике настройка часто упирается в нюансы: права доступа, версии платформы, брандмауэр и различия между файловой и клиент-серверной базой.

Механизм работает так: агент сервера 1С запускается с ключом -debug, после чего серверные процессы (rphost) получают возможность взаимодействовать с отладчиком по протоколу TCP или HTTP. Конфигуратор подключается к этим процессам и останавливает выполнение на заданных точках. В файловой базе серверного процесса нет, поэтому там серверный код отлаживается как часть клиентского приложения — отдельная настройка не требуется.

Ниже разобран полный порядок включения серверной отладки на Windows и Linux, настройка конфигуратора, проверка результата и типичные ошибки, из-за которых точки останова «не ловятся».

Когда нужна серверная отладка и какие есть ограничения

Серверная отладка требуется только в клиент-серверном варианте работы. Признак того, что она не включена: конфигуратор при запуске отладки показывает предупреждение «Отладка на сервере не настроена», а точки останова в серверных модулях игнорируются. Если база файловая, серверный код выполняется внутри клиентского процесса, и отладка работает без дополнительных настроек — при условии, что файл базы не открыт в режиме, блокирующем отладку.

Важное ограничение: включение отладки на продуктивном сервере снижает производительность серверных процессов и увеличивает потребление памяти, поскольку каждый rphost поддерживает отладочный канал. Кроме того, остановка выполнения на точке останова блокирует сеанс пользователя, а при определённых настройках — весь рабочий процесс. Поэтому на боевом контуре отладку включают на короткое время диагностики и выключают сразу после.

Включение отладки на сервере Windows

На Windows агент сервера 1С обычно работает как служба. Чтобы передать ей параметр -debug, нужно изменить параметры запуска службы в реестре. Откройте редактор реестра и найдите ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, внутри неё — раздел службы агента сервера 1С (имя содержит версию платформы и порт, например 1C:Enterprise 8.3 Server Agent (x86-64)).

В параметре ImagePath найдите строку запуска исполняемого файла ragent.exe и добавьте в конец строки ключ -debug. Если планируется отладка по протоколу HTTP, дополнительно укажите -http. Сохраните изменение и перезапустите службу через оснастку «Службы» или командой net stop / net start. Без перезапуска параметр не применится.

text
...\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug

Альтернативный способ — запуск агента как приложения из командной строки с теми же параметрами. Это удобно для разовой диагностики: службу останавливают, агент запускают вручную с ключом -debug, а после завершения отладки возвращают обычный режим службы.

Порядок действий на Windows
  1. 1
    Откройте реестр и найдите раздел службы агента сервера 1С
  2. 2
    В параметре ImagePath добавьте ключ -debug в строку запуска ragent.exe
  3. 3
    Перезапустите службу агента сервера
  4. 4
    В конфигураторе откройте Отладка — Подключение и проверьте доступность серверных процессов
  5. 5
    После диагностики уберите -debug и снова перезапустите службу

Включение отладки на сервере Linux

На Linux агент сервера запускается скриптом srv1cv8 или через systemd-юнит, в зависимости от способа установки. Параметр отладки добавляется в переменную SRV1CV8_DEBUG в конфигурационном файле (обычно /etc/sysconfig/srv1cv8 или аналогичный) либо напрямую в строку запуска демона — ключ тот же: -debug.

После правки конфигурации перезапустите сервис командой systemctl restart srv1cv8 (имя юнита может отличаться в зависимости от версии установщика). Убедитесь, что процесс ragent запущен с новым параметром: ps aux | grep ragent должен показать -debug в строке процесса. Также проверьте, что учётная запись, под которой работает агент, имеет доступ к каталогу srvinfo — без этого сервер может не стартовать корректно.

Настройка конфигуратора и подключение предметов отладки

После включения отладки на сервере нужно настроить конфигуратор. Откройте меню «Сервис — Параметры», раздел «Отладка». Здесь выбирается протокол отладки: TCP (классический) или HTTP. Протокол HTTP удобнее, когда между конфигуратором и сервером есть брандмауэр или публикация через веб-сервер, — обмен идёт через стандартный порт веб-сервера, и открывать диапазон портов отладки не нужно. Протокол TCP требует сетевой доступности портов отладки на сервере.

Далее запустите отладку (F5) и откройте «Отладка — Подключение». В окне подключения отметьте типы предметов отладки, которые нужно перехватывать: «Сервер», фоновые задания, HTTP-сервисы, веб-сервисы. По умолчанию часть типов может быть отключена — это частая причина, почему отладка «включена», но серверный код не останавливается. Для автоматического подключения новых предметов отладки включите соответствующие флажки в настройках.

Типичные ошибки
01
Добавили -debug, но не перезапустили службу — параметр не применился, отладка не работает
02
Не отметили типы предметов отладки в окне подключения — фоновые задания и веб-сервисы не перехватываются
03
Версия платформы конфигуратора отличается от версии сервера — подключение отладчика невозможно
04
Закрыт диапазон портов отладки на брандмауэре при протоколе TCP — конфигуратор не видит серверные процессы
05
Отлаживают код, который выполняется в другом рабочем процессе или под другим пользователем сеанса

Проверка, что серверная отладка работает

Самый надёжный способ проверки — поставить точку останова в серверной процедуре, которая гарантированно выполнится: например, в обработчике проведения документа или в серверной функции общего модуля. Запустите отладку, выполните действие в клиентском приложении и убедитесь, что конфигуратор остановился на точке и показывает значения переменных.

Если остановки нет, проверьте цепочку: запущен ли агент с ключом -debug (видно в строке процесса), совпадает ли версия платформы конфигуратора с версией сервера, выбраны ли предметы отладки, не выполняется ли код в фоновом задании, которое не подключено к отладке. Для фоновых заданий в окне подключения можно принудительно подключить конкретное задание по его идентификатору.

Контрольные точки

Как проверить результат

Строка процесса ragent
Норма

В параметрах запуска присутствует -debug

Тревожный признак

Ключа нет — служба запущена в обычном режиме

Точка останова в серверном модуле
Норма

Конфигуратор останавливается и показывает стек вызовов

Тревожный признак

Выполнение проходит мимо точки

Окно подключения предметов отладки
Норма

Нужные типы (Сервер, Фоновое задание) отмечены

Тревожный признак

Требуемый тип не выбран

Отладка фоновых заданий, веб-сервисов и особых сценариев

Фоновые задания выполняются в отдельных сеансах на сервере, поэтому их нужно подключать к отладке явно. В окне «Отладка — Подключение» включите тип «Фоновое задание» и при необходимости установите отбор по конкретному заданию. Учтите, что короткоживущие задания могут завершиться до подключения — в таком случае удобно временно добавить в код задержку или запускать логику синхронно на тестовой базе.

Для HTTP- и веб-сервисов 1С отладка включается тем же механизмом: выбирается соответствующий тип предмета отладки, после чего точки останова в модулях сервисов начинают срабатывать при входящих вызовах. Если сервисы опубликованы на веб-сервере, дополнительно проверьте, что публикация указывает на ту же информационную базу, к которой подключён конфигуратор.

Маршрут решения

Как выбрать действие

База файловая, серверный код не останавливаетсяОтдельная настройка не нужна — проверьте, что отладка запущена и код действительно выполняется
Клиент-серверная база, точки на сервере игнорируютсяДобавьте -debug в запуск агента сервера и перезапустите службу
Отладка включена, но фоновое задание не перехватываетсяВ окне подключения включите тип предмета отладки Фоновое задание
Между конфигуратором и сервером брандмауэрПереключите протокол отладки на HTTP в параметрах конфигуратора

Как отключить отладку после диагностики

После завершения работ отладку следует выключить: уберите ключ -debug из строки запуска службы (или верните исходное значение ImagePath из резервной копии параметра) и перезапустите агент сервера. Это снимет дополнительную нагрузку на серверные процессы и закроет отладочные порты, которые в открытом виде представляют потенциальный риск безопасности — через них возможно подключение к выполняющемуся коду.

Перед правкой реестра или конфигурационных файлов сохраните исходные значения. Это позволит быстро вернуть рабочую конфигурацию, если после изменений служба не стартует. Признак успешного отключения: процесс ragent запущен без ключа -debug, а конфигуратор при попытке отладки серверного кода выдаёт стандартное предупреждение о ненастроенной отладке.

Итог

Что важно запомнить

Серверная отладка включается ключом -debug в параметрах запуска агента сервера 1С и перезапуском службы, затем в конфигураторе выбираются протокол и предметы отладки. На продуктиве её держат включённой только на время диагностики и обязательно отключают после.

Частые вопросы

Почему конфигуратор пишет «Отладка на сервере не настроена», хотя ключ -debug добавлен?

Чаще всего служба агента не была перезапущена после правки, и параметр не применился. Проверьте строку запущенного процесса ragent. Также возможно несовпадение версий платформы конфигуратора и сервера или правка не той ветки реестра — убедитесь, что изменён параметр ImagePath именно той службы, которая обслуживает ваш кластер.

Нужно ли включать серверную отладку для файловой базы?

Нет. В файловом варианте серверный код выполняется внутри процесса клиентского приложения, поэтому точки останова в серверных модулях работают при обычном запуске отладки из конфигуратора. Отдельные настройки требуются только для клиент-серверного режима.

Какой протокол отладки выбрать — TCP или HTTP?

TCP подходит, когда конфигуратор и сервер находятся в одной сети и порты отладки доступны. HTTP удобнее при наличии брандмауэра, удалённого доступа или публикации через веб-сервер, поскольку трафик идёт через стандартный веб-порт. При сомнениях начните с HTTP — он проще в сетевой настройке.

Опасно ли оставлять отладку включённой на продуктивном сервере?

Да. Включённая отладка увеличивает нагрузку на серверные процессы, открывает дополнительные каналы подключения к выполняющемуся коду и позволяет остановить сеанс пользователя на точке останова. Включайте её только на время диагностики, а лучше воспроизводите проблему на копии базы.

Как отладить код, который выполняется в фоновом задании?

В конфигураторе откройте «Отладка — Подключение» и включите тип предмета отладки «Фоновое задание». При необходимости задайте отбор по конкретному заданию. Если задание завершается слишком быстро, временно добавьте в его код паузу или запустите ту же логику синхронно на тестовой базе.

Что делать, если после добавления -debug служба агента не стартует?

Проверьте синтаксис строки запуска: ключ указывается без опечаток, путь к ragent.exe и параметры каталога srvinfo не изменены. Верните исходное значение параметра из сохранённой копии, убедитесь, что служба стартует, и добавьте ключ заново аккуратно. На Linux дополнительно проверьте права учётной записи агента на каталог данных кластера.