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

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

Как включить отладку сервера 1С

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

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

Включение отладки сводится к запуску агента сервера 1С (ragent) с параметром -debug и последующему подключению конфигуратора к нужному предмету отладки. Способ задания параметра зависит от операционной системы и от того, как запущен кластер — как служба Windows, как процесс в Linux или через службу агрегирования в тестовой среде.

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

Что нужно проверить перед включением отладки

Перед изменением параметров службы убедитесь, что у вас есть права администратора на сервере, где работает кластер 1С, и что вы понимаете, какая версия платформы используется. От версии зависит протокол отладки: до платформы 8.3.7 применялся отладочный протокол по TCP, начиная с 8.3.7 доступен отладочный протокол по HTTP, который стал основным в современных версиях.

Также проверьте, что конфигуратор, из которого будет вестись отладка, той же версии платформы, что и сервер. Несовпадение версий — частая причина того, что предметы отладки не отображаются в списке подключения. Если на сервере несколько версий платформы, уточните, под какой именно работает нужная информационная база.

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

Сервер работает как служба WindowsПараметр задаётся в реестре

Ветка HKLM\SYSTEM\CurrentControlSet\Services с именем службы агента

Сервер в LinuxПараметр в скрипте запуска

Systemd-юнит или скрипт запуска ragent

Платформа 8.3.7 и новееДоступна отладка по HTTP

Отладка через web-сервер, публикация отладочного интерфейса

Точки останова не срабатываютОтладка не включена или предмет не подключён

Проверить параметр -debug и список подключённых предметов

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

Самый распространённый сценарий — сервер 1С работает как служба Windows «Агент сервера 1С:Предприятия». Параметры запуска этой службы хранятся в реестре, и именно туда добавляется ключ -debug.

Откройте редактор реестра (regedit) и перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Найдите подраздел службы агента — его имя обычно содержит версию платформы, например 1C:Enterprise 8.3 Server Agent с номером версии и портом. Внутри найдите строковый параметр ImagePath — это полная командная строка запуска ragent.exe.

Аккуратно допишите в конец строки параметр -debug через пробел, не удаляя существующие параметры (-srvc, -agent, -regport, -port, -range, -d и другие). Сохраните изменение и перезапустите службу через оснастку services.msc или командой перезапуска. Без перезапуска службы параметр не применится.

Порядок действий в Windows
  1. 1
    Откройте regedit и найдите ветку службы агента сервера 1С в HKLM\SYSTEM\CurrentControlSet\Services
  2. 2
    Откройте параметр ImagePath двойным щелчком
  3. 3
    Допишите в конец строки параметр -debug через пробел
  4. 4
    Сохраните параметр и перезапустите службу агента сервера
  5. 5
    В конфигураторе откройте Отладка — Подключение и подключите нужные предметы отладки

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

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

В Linux агент сервера обычно запускается через systemd-юнит или собственный скрипт. Параметр -debug добавляется в строку вызова ragent в файле юнита (директива ExecStart) или в скрипте запуска.

Откройте файл юнита (часто он расположен в /etc/systemd/system/ и называется примерно как srv1cv8.service), найдите строку запуска и допишите -debug к аргументам ragent. После правки выполните перечитывание конфигурации systemd и перезапуск службы.

bash
sudo systemctl daemon-reload && sudo systemctl restart srv1cv8

Проверить, что агент запустился с нужным параметром, можно через список процессов: в выводе команды ps aux | grep ragent в строке процесса должен присутствовать -debug. Если параметра нет — либо правился не тот файл, либо служба не была перезапущена.

Отладка по протоколу HTTP через web-сервер

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

Для отладки по HTTP в клиент-серверном варианте агент всё равно запускается с -debug, но дополнительно на web-сервере публикуется отладочный интерфейс. В диалоге публикации информационной базы на web-сервере (Apache или IIS) на вкладке настроек есть флажок разрешения отладки и выбор протокола — TCP или HTTP. При выборе HTTP указывается адрес отладчика.

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

Сравнение протоколов отладки

Отладка по TCP

Классический вариант, требует доступности отладочных портов между конфигуратором и сервером; в новых версиях платформы постепенно вытесняется HTTP

Отладка по HTTP

Работает через web-сервер и стандартный канал связи, подходит для отладки через интернет и при ограниченных сетевых правилах; требует публикации отладочного интерфейса

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

Включённый параметр -debug сам по себе ничего не отлаживает — конфигуратор должен подключиться к конкретным предметам отладки. Откройте меню «Отладка — Подключение». В появившемся окне нажмите кнопку подключения и отметьте нужные типы предметов: серверный контекст, фоновые задания, web-сервисы, HTTP-сервисы, внешние соединения.

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

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

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

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

Параметр запуска агента
Норма

В строке процесса ragent присутствует -debug

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

Параметра нет — служба не перезапущена или правился не тот раздел реестра

Список предметов отладки
Норма

В окне подключения видны серверные сеансы и фоновые задания

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

Список пуст — отладка не включена или версии платформы не совпадают

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

Исполнение останавливается, доступен стек вызовов

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

Точка подсвечена как недостижимая — предмет отладки не подключён

Типичные ошибки и ограничения

Наиболее частая ошибка — правка реестра без перезапуска службы или перезапуск не той службы, когда на сервере установлено несколько версий платформы. Проверяйте, какая именно служба обслуживает рабочий кластер, по номеру порта в имени службы и в консоли кластера.

Вторая группа проблем — сетевые: при отладке по TCP между компьютером разработчика и сервером должны быть доступны отладочные порты кластера. Если соединение блокируется межсетевым экраном, переходите на отладку по HTTP через web-сервер.

Третья типичная ситуация — попытка отладить код, который выполняется в привилегированном режиме или в другом сеансе, не подключённом к отладчику. Также помните, что отладка не работает для кода, выполняющегося на стороне СУБД (запросы исполняются в СУБД, и пошагово их отладить в конфигураторе нельзя — только анализировать текст запроса и результат).

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

Как отключить отладку после завершения работ

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

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

Итог

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

Отладка сервера включается параметром -debug в строке запуска агента сервера с обязательным перезапуском службы, после чего предметы отладки подключаются в конфигураторе вручную. Для современных версий платформы предпочтительна отладка по HTTP через web-сервер, а на продуктивных системах режим отладки следует включать только временно.

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

Можно ли включить отладку сервера без перезапуска службы?

Нет. Параметр -debug считывается агентом сервера только при старте процесса, поэтому перезапуск службы обязателен. Учтите, что перезапуск агента на продуктивном сервере разорвёт активные сеансы пользователей — планируйте работу на нерабочее время.

Почему точка останова в серверной процедуре отображается как недостижимая?

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

Как отладить фоновое задание на сервере?

Включите отладку на сервере параметром -debug, затем в конфигураторе в настройках отладки («Сервис — Параметры») разрешите автоматическое подключение фоновых заданий. После этого запустите задание — конфигуратор подхватит его сеанс и остановится на точке останова в модуле, который исполняет задание.

Нужен ли -debug для отладки по HTTP?

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

Влияет ли режим отладки на производительность сервера?

Да. В режиме отладки серверный код исполняется медленнее, а остановка на точке останова блокирует соответствующий сеанс. Поэтому на продуктивных системах отладку включают кратковременно для диагностики и обязательно отключают после завершения, удаляя параметр -debug и перезапуская службу.

Можно ли отлаживать серверный код в файловой базе?

В файловом варианте код с директивой «НаСервере» фактически выполняется в том же процессе клиентского приложения, поэтому отдельный параметр -debug не нужен — достаточно запустить отладку из конфигуратора обычным способом. Параметр -debug требуется именно для кластера серверов 1С.