Серверная отладка 1С 8.3: ключ -debug для агента, протоколы TCP и HTTP, подключение из конфигуратора

· 9 мин

Содержание

Отладку на сервере 1С включают ключом -debug в строке запуска агента сервера ragent.exe. Затем службу перезапускают, а в конфигураторе включают автоматическое подключение к серверу. Пока ключа нет, точки останова в серверных процедурах не срабатывают: конфигуратор просто не видит серверных предметов отладки.

Порядок одинаков для Windows и Linux, отличается только место правки. Всё описанное относится к платформе 8.3 в клиент-серверном варианте и не зависит от конфигурации: БП, ЗУП и УТ отлаживаются одинаково.

Зачем включать отладку на сервере 1С и чем она отличается от файловой

В файловой базе код «на сервере» выполняется внутри клиентского процесса. Поэтому отладка там работает сразу, без настроек сервера.

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

Когда без серверной отладки не обойтись:

  • 🐞 ошибка воспроизводится только на рабочей базе, а в файловой копии её нет;
  • 🧾 проведение документа падает в процедуре модуля объекта или менеджера;
  • ⏰ нужно поймать фоновое или регламентное задание — они всегда выполняются на сервере;
  • 🔌 отлаживается HTTP-сервис, веб-сервис или обработчик обмена, вызываемый извне;
  • 🐢 нужно найти медленный фрагмент замером производительности именно в серверном контексте.

Режим отладки немного нагружает сервер и открывает дополнительный канал подключения. На рабочем сервере его включают на время разбора и выключают после.

Способы включить серверную отладку: что из них что делает

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

ГдеЧто делаемОбязательно?
Служба агента сервера (Windows)Добавляем -debug в путь к исполняемому файлуДа, на Windows
Unit systemd или файл настроек службы (Linux)Добавляем -debug в команду запускаДа, на Linux
Конфигуратор: параметры отладкиВыбираем протокол, совпадающий с серверомДа, при HTTP
Конфигуратор: Отладка → ПодключениеВключаем автоподключение к серверуДа
Консоль администрирования кластераТолько наблюдаем рабочие процессы и сеансыНет

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

TCP или HTTP: какой протокол выбрать

У серверной отладки два протокола.

  • TCP — классический вариант. Конфигуратор соединяется с рабочими процессами напрямую по портам из диапазона рабочего сервера (по умолчанию 1560:1591).
  • HTTP — вариант через сервер отладки dbgs. Все предметы отладки регистрируются на нём, а конфигуратор или EDT ходит к нему по одному порту (по умолчанию 1550). Его проще пропустить через межсетевой экран, и только он работает с 1С:EDT.

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

Способ 1. Включение отладки на сервере 1С под Windows через параметры службы

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

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

Шаг 1. Найдите имя службы

  1. Откройте services.msc.
  2. Найдите службу агента сервера 1С:Предприятия 8.3. На 64-битной платформе её стандартное имя 1C:Enterprise 8.3 Server Agent (x86-64).
  3. Откройте свойства и скопируйте поле «Имя службы». Если на сервере стоит несколько версий платформы, проверьте в поле «Исполняемый файл», к какой версии относится служба.

Строку запуска можно посмотреть и из командной строки:

sc qc "1C:Enterprise 8.3 Server Agent (x86-64)"

В выводе нужна строка BINARY_PATH_NAME.

Шаг 2. Допишите ключ -debug

  1. Запустите regedit от имени администратора.
  2. Откройте ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ и в ней раздел с именем службы из шага 1.
  3. Откройте параметр ImagePath.
  4. Вставьте -debug после пути к ragent.exe, перед остальными ключами. Для HTTP-отладки — -debug -http.

Было:

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

Стало (TCP):

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

Стало (HTTP):

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

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

Перед правкой выгрузите раздел службы в .reg-файл (правая кнопка → «Экспортировать»). Ошибка в кавычках или пути — и служба перестанет запускаться. Из сохранённого файла всё возвращается двойным щелчком.

Шаг 3. Перезапустите службу

В services.msc выполните «Перезапустить» или из командной строки администратора:

net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Если остановка зависла, подождите: агент завершает рабочие процессы и сеансы. Снимать rphost диспетчером задач посреди проведения документов не стоит.

Способ 2. Отладка на сервере 1С под Linux: файл настроек службы или unit systemd

На Linux ключ тоже передаётся агенту, но место правки зависит от того, как установлен сервер.

Старый скрипт службы srv1cv83

На платформах, где сервер стартует скриптом /etc/init.d/srv1cv83, параметры читаются из файла настроек:

  • RHEL, CentOS, РЕД ОС, ALT — /etc/sysconfig/srv1cv83;
  • Debian, Ubuntu, Astra — /etc/default/srv1cv83.

В файле есть переменная режима отладки. Раскомментируйте её и задайте значение 1:

SRV1CV8_DEBUG=1

Затем перезапустите службу:

sudo systemctl restart srv1cv83

Новые версии с unit-файлом systemd

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

systemctl list-units | grep 1cv8
sudo systemctl edit --full <имя-юнита>

В открывшемся файле найдите строку ExecStart= с путём к ragent и добавьте -debug (или -debug -http) так же, как в Windows. Сохраните и перезапустите:

sudo systemctl daemon-reload
sudo systemctl restart <имя-юнита>

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

Способ 3. Настройка конфигуратора для подключения к серверной отладке

Сервер готов, теперь очередь конфигуратора. Без этих двух настроек остановок не будет даже при верно запущенном агенте.

Протокол отладки

В конфигураторе откройте Сервис → Параметры, вкладку отладки. Протокол должен совпадать с тем, что указан у агента:

  • агент с -debug — отладка по TCP/IP;
  • агент с -debug -http — отладка по HTTP.

При смешанных настройках конфигуратор не увидит серверных предметов.

Автоматическое подключение к серверу

  1. Откройте конфигуратор нужной базы.
  2. Запустите отладку (F5) или откройте окно Отладка → Подключение.
  3. Нажмите «Автоматическое подключение» и отметьте предметы отладки «Сервер» и при необходимости «Фоновое задание».
  4. Поставьте точку останова в серверной процедуре (F9) и выполните действие в клиенте.

Клиент, запущенный не из конфигуратора, тоже можно отлаживать. Для этого его запускают с ключом /DEBUG:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "srv1c\buh" /DEBUG

Здесь srv1c — имя сервера, buh — имя базы в кластере.

Проверка перед первой точкой останова
Выполнено: 0 / 5

Как проверить, что сервер 1С запущен в режиме отладки

Не доверяйте реестру — проверяйте живой процесс. Служба могла не перезапуститься или запуститься старая версия.

Windows, PowerShell от администратора:

Get-CimInstance Win32_Process -Filter "Name='ragent.exe'" | Select-Object ProcessId, CommandLine

В CommandLine должен быть ключ -debug. То же видно в диспетчере задач: вкладка «Подробности», правой кнопкой по заголовку столбцов → добавить столбец «Командная строка».

Linux:

ps -ef | grep [r]agent

Для HTTP-режима дополнительно проверьте, что поднялся сервер отладки и слушает порт:

ps -ef | grep [d]bgs
ss -ltnp | grep 1550

На Windows — netstat -ano | findstr 1550.

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

Если точки останова на сервере не срабатывают

Шаги выше выполнены, а остановки нет. Пройдитесь по симптомам.

Диагностика: выберите симптом

Ещё два случая, которые встречаются на практике:

  • 🖥️ В кластере несколько рабочих серверов. Ключ -debug нужен на каждом, где выполняется код базы. Иначе остановки будут «через раз» — в зависимости от того, какой процесс взял вызов.
  • 🔁 После обновления платформы отладка пропала. Установщик новой версии создаёт службу со своей строкой запуска. Ключ придётся добавить заново.

Безопасность серверной отладки на рабочей базе

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

Что стоит соблюдать:

  • 🔒 Включайте на время. Нашли ошибку — уберите -debug и перезапустите службу в ближайшее окно.
  • 🧱 Ограничьте порты. Порт 1550 и диапазон рабочих процессов открывайте на фаерволе только для адресов разработчиков, а не для всей сети.
  • 👥 Права в базе. Подключиться к отладке может пользователь, у которого есть доступ к конфигуратору базы. Держите роль администратора у минимума людей.
  • ⏸️ Помните о блокировках. Пока выполнение стоит на точке останова, транзакция открыта, и её блокировки держат других пользователей. Не оставляйте остановку в проведении документа на полчаса посреди рабочего дня.
  • 🧪 Лучше копия. Если ошибка воспроизводится на копии базы, развёрнутой на тестовом сервере, отлаживайте там. Рабочий сервер оставьте пользователям.

Точка останова в обработчике, который вызывают все пользователи, остановит каждого, у кого сработает этот код. Ставьте условные точки останова (правой кнопкой по точке → условие), например по имени текущего пользователя.

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

Нужно ли перезапускать службу агента, чтобы включить отладку?
Да. Ключ -debug читается только при старте агента, поэтому без перезапуска службы режим не включится. Перезапуск обрывает сеансы пользователей.
Можно ли включить серверную отладку только для одной информационной базы?
Нет. Ключ действует на весь агент и все базы его кластера. Ограничить доступ можно правами пользователей в конфигураторе конкретной базы.
Почему отладка в файловой базе работает, а на сервере нет?
В файловом варианте серверный код выполняется в клиентском процессе. В клиент-серверном его исполняет рабочий процесс кластера, а он запускается в режиме отладки только при ключе -debug у агента.
Сильно ли режим отладки замедляет сервер?
Пока никто не подключён, накладные расходы небольшие. Заметное замедление бывает во время активного сеанса отладки с остановками и замером производительности.
Как отлаживать серверный код из 1С:EDT?
Запустите агент с ключами -debug -http. EDT подключается к серверу отладки по HTTP, режим TCP он не использует.