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

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

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

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

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

Причина в архитектуре: по умолчанию сервер 1С запускается без поддержки отладки, и конфигуратор не может подключиться к рабочему процессу rphost. Чтобы это изменить, сервер нужно перезапустить со специальным параметром, а затем правильно настроить подключение в конфигураторе. Ниже разобран полный порядок действий для Windows и Linux, особенности отладки фоновых заданий и типичные проблемы.

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

В клиент-серверном режиме код делится на клиентский и серверный. Директивы компиляции &НаСервере, &НаСервереБезКонтекста, серверные общие модули и код бизнес-логики выполняются внутри рабочих процессов сервера 1С (rphost). Конфигуратор по умолчанию «видит» только клиентский процесс, поэтому серверные точки останова игнорируются.

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

Отладка на сервере необходима в таких ситуациях:

  • ошибка воспроизводится только в клиент-серверной базе, а в файловой копии не повторяется;
  • нужно пошагово проверить фоновое или регламентное задание;
  • требуется отладить обработчик веб-сервиса или HTTP-сервиса;
  • падает обмен данными, который выполняется на сервере;
  • нужно понять, какие запросы и данные обрабатывает серверная процедура.

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

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

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

Второй способ — перерегистрировать службу утилитой ragent с нужными параметрами. Этот вариант удобен, если служб несколько или требуется точно контролировать строку запуска. Команда выполняется от имени администратора.

bash
sc stop "1C:Enterprise 8.3 Server Agent (x86-64)" && sc start "1C:Enterprise 8.3 Server Agent (x86-64)" -- -debug

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

Порядок включения отладки на Windows-сервере
  1. 1
    Откройте реестр и найдите параметр ImagePath службы агента сервера 1С
  2. 2
    Добавьте в конец строки запуска ключ -debug
  3. 3
    Перезапустите службу агента сервера 1С
  4. 4
    В конфигураторе включите протокол отладки TCP/IP (Отладка → Параметры)
  5. 5
    Подключите серверный сеанс через Отладка → Подключение
  6. 6
    Поставьте точку останова в серверном коде и воспроизведите действие

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

На Linux агент сервера 1С запускается скриптом или юнитом systemd. Принцип тот же: в строку запуска процесса ragent нужно добавить параметр -debug. Для этого отредактируйте unit-файл службы (обычно в /etc/systemd/system/ или в каталоге, созданном при установке) и дополните директиву ExecStart ключом отладки.

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

bash
systemctl daemon-reload && systemctl restart srv1cv83 && ps aux | grep ragent

Дополнительно убедитесь, что сетевые порты кластера доступны с машины разработчика: конфигуратор подключается к серверу по сети, и блокировка межсетевым экраном — частая причина того, что сеанс не подключается. На Linux это проверяется настройками firewalld или iptables.

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

После перезапуска сервера нужно настроить сам конфигуратор. Откройте меню «Отладка → Параметры» и убедитесь, что выбран протокол отладки по TCP/IP — именно он поддерживает отладку серверного кода. Режим HTTP используется в основном для отладки через веб-сервер и мобильных клиентов.

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

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

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

Как проверить, что отладка работает

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

Содержит ключ -debug

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

Ключа нет — служба запущена без отладки

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

Видны серверные сеансы, доступна кнопка «Подключить»

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

Список пуст или сеансы не подключаются

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

Выполнение останавливается, видны переменные

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

Точка останова игнорируется, код выполняется без остановки

Отладка фоновых и регламентных заданий

Фоновые задания выполняются в отдельных сеансах, которые создаются в момент запуска задания и исчезают после завершения. Поэтому подключиться к ним заранее нельзя — сеанс появляется только на время выполнения. Для отладки в окне подключения включите автоматическое подключение к фоновым заданиям: в параметрах отладки есть соответствующая настройка, либо используйте отбор по типу сеанса в окне подключения.

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

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

Отладка веб-сервисов и HTTP-сервисов

Код веб-сервисов и HTTP-сервисов выполняется на сервере в сеансах, которые создает веб-сервер при обращении к публикации. Чтобы отладить такой обработчик, отладка на сервере должна быть включена, а в конфигураторе нужно разрешить автоматическое подключение сеансов соответствующего типа — веб-сервисов и HTTP-сервисов.

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

Типичные ошибки и их устранение

Чаще всего отладка не работает из-за того, что службу не перезапустили после добавления ключа, либо ключ добавили не туда — например, в ярлык клиента вместо параметров агента сервера. Проверка строки запуска процесса ragent — первое действие при любой проблеме.

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

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

Безопасность и отключение режима отладки

Режим отладки — это потенциальная уязвимость: он позволяет подключиться к серверным процессам и инспектировать данные, обрабатываемые в сеансах. Поэтому на продуктивных серверах ключ -debug должен присутствовать только на время поиска проблемы и только с ведома администратора.

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

Итог

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

Серверная отладка включается ключом -debug в параметрах запуска агента сервера 1С с обязательным перезапуском службы. В конфигураторе выбирается протокол TCP/IP и подключается нужный сеанс через «Отладка → Подключение». Для фоновых заданий и сервисов включается автоподключение соответствующих типов сеансов. На продуктивном сервере режим отладки держат включённым только на время диагностики.

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

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

Наиболее вероятные причины: сервер запущен без ключа -debug, службу не перезапускали после его добавления, либо в конфигураторе подключён только клиентский сеанс. Проверьте строку запуска процесса ragent и подключите серверный сеанс через «Отладка → Подключение».

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

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

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

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

Как отладить регламентное задание, которое запускается по расписанию?

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

Нужен ли ключ -debug для отладки через веб-сервер по протоколу HTTP?

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

Что делать, если окно подключения показывает пустой список сеансов?

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