Серверная отладка 1С:Предприятия 8.3: ключ -debug у агента, настройки конфигуратора и предметы отладки
Содержание
Чтобы подключить отладку на сервере 1С 8.3, добавьте ключ -debug в строку запуска службы агента сервера ragent.exe, перезапустите службу и в конфигураторе откройте Отладка → Подключение. Пока сервер работает без этого ключа, точки останова в серверном коде (&НаСервере, общие модули, фоновые задания, HTTP-сервисы) не срабатывают, хотя клиентский код отлаживается как обычно.
Debug на сервере бывает двух видов. Протокол TCP — старый вариант: конфигуратор подключается к рабочим процессам напрямую. Протокол HTTP появился в 8.3.7: все участники работают через отдельный сервер отладки dbgs.exe, и его проще провести через брандмауэр и сеть. Для одного сервера в локальной сети хватит TCP, для удалённого сервера и сложной сети удобнее HTTP.
Что проверить на сервере до включения отладки
Отладку включают на всём кластере сразу, а не на отдельной базе. Поэтому сначала решите, где вы это делаете.
- 🧪 Тестовый сервер или копия базы. Отладка на рабочем сервере возможна, но остановка на точке держит транзакцию и блокировки. Пользователи, которые ждут те же данные, повиснут вместе с вашим сеансом.
- 🔢 Совпадение версий. Версия платформы конфигуратора, из которого вы отлаживаете, должна совпадать с версией сервера до последней цифры сборки, например 8.3.24.1548 и 8.3.24.1548.
- 🔑 Права. Нужен доступ администратора к Windows-серверу (менять службу и реестр) и пользователь информационной базы с административными правами.
- 🌐 Сеть. Компьютер разработчика должен видеть сервер по портам кластера: агент 1540, менеджер кластера 1541 и диапазон рабочих процессов (по умолчанию 1560–1591). Для HTTP-отладки добавляется порт сервера отладки, по умолчанию 1550.
Узнать, как сейчас запущен агент, можно в свойствах службы: Win + R → services.msc → служба «Агент сервера 1С:Предприятия 8.3» → вкладка «Общие» → поле «Исполняемый файл».
Как включить debug в службе агента сервера
Ключ -debug передаётся агенту, а дальше режим отладки получают менеджер кластера rmngr и все рабочие процессы rphost. Править отдельно rmngr и rphost не нужно.
Перезапуск службы агента обрывает сеансы всех пользователей всех баз этого кластера. Делайте это вечером или после предупреждения пользователей.
Способ 1. Через реестр Windows
- Остановите службу агента в
services.msc. - Откройте
regeditи перейдите вHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. - Найдите раздел службы 1С. Его имя обычно начинается с
1C:Enterprise 8.3 Server Agent. - Откройте параметр
ImagePathи допишьте-debugпосле-agent. - Запустите службу и проверьте, что она поднялась без ошибок.
Строка запуска до и после правки выглядит так:
"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -srvc -agent -debug -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Меняйте только ключ отладки. Порты, диапазон и путь к каталогу srvinfo не трогайте — иначе кластер стартует с другими настройками и базы «пропадут» из списка.
Способ 2. Командой sc config
То же самое делается из командной строки, запущенной от имени администратора. Пробел после binPath= обязателен, внутренние кавычки экранируются обратным слешем:
sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "\"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe\" -srvc -agent -debug -regport 1541 -port 1540 -range 1560:1591 -d \"C:\Program Files\1cv8\srvinfo\""
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
Точное имя службы возьмите в её свойствах, поле «Имя службы». Оно зависит от разрядности и способа установки.
Если сервер на Linux
На Linux принцип тот же: ключ -debug добавляется в параметры запуска ragent. Где лежит строка запуска, зависит от версии: в старых сборках это файл настроек init-скрипта srv1cv83, в новых — unit-файл systemd с параметром ExecStart. После правки unit-файла выполните systemctl daemon-reload и перезапустите службу.
Настройка конфигуратора для серверной отладки
Когда агент запущен с ключом, конфигуратор нужно настроить на тот же протокол.
- Откройте базу в конфигураторе.
- Перейдите в
Сервис → Параметры→ вкладка «Отладка». - Выберите протокол отладки: TCP/IP или HTTP. Он должен совпадать с тем, в каком режиме запущен сервер.
- Для HTTP укажите адрес сервера отладки, например
http://srv1c:1550. - Откройте
Отладка → Подключение. Появится окно предметов отладки. - Нажмите «Автоматическое подключение» и отметьте нужные типы: сервер, фоновое задание, HTTP-сервис, веб-сервис, клиентские приложения.
- Запустите клиент кнопкой
Отладка → Начать отладкуили подключитесь к уже открытому сеансу.
После этого поставьте точку останова (F9) в серверной процедуре и выполните действие в клиенте. Если всё настроено, конфигуратор выйдет на передний план со строкой, подсвеченной жёлтым.
Другие способы подключить отладчик
Кроме автоматического подключения из конфигуратора, есть ещё три пути. Выбирайте по ситуации.
| Способ | Когда подходит | Ограничения |
|---|---|---|
Ключ -debug (TCP) | Один сервер в локальной сети | Нужен открытый диапазон портов рабочих процессов |
Ключ -debug -http | Удалённый сервер, NAT, несколько разработчиков | Нужен доступ к порту сервера отладки |
Запуск клиента с /DEBUG | Отладка конкретного сеанса пользователя | Сервер всё равно должен быть в режиме отладки |
| Отладка в EDT | Разработка в 1С:EDT | Те же требования к серверу, настройка в конфигурации запуска EDT |
Режим HTTP и параметры сервера отладки
Для HTTP-отладки агент запускают с ключами -debug -http. По умолчанию сервер отладки поднимается на той же машине. Если нужен другой адрес или порт, используются параметры -debugServerAddr и -debugServerPort. Полный перечень ключей для вашей сборки смотрите в справке к ragent.
Запуск клиента в режиме отладки
Клиент можно запустить сразу подключённым к отладчику. Это удобно, когда ошибка воспроизводится только у конкретного пользователя на его компьютере:
"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /S"srv1c\buh" /DEBUG -http -attach /DEBUGGERURL "http://srv1c:1550"
Клиент сам зарегистрируется на сервере отладки, а конфигуратор увидит его в списке предметов.
Отладка в кластере: как ведут себя rmngr и rphost
В клиент-серверном варианте серверный код выполняется не «на сервере вообще», а в конкретном рабочем процессе rphost. На одном сервере их может быть несколько, и вызовы одного сеанса иногда попадают в разные процессы.
Что из этого следует на практике:
- 🔄 Точки останова ставятся один раз. Конфигуратор передаёт их во все подключённые процессы, следить за номером
rphostне нужно. - 🧩 Автоподключение важнее ручного. Если подключать предметы отладки вручную, новый рабочий процесс, который кластер поднимет позже, останется без отладчика. Автоматическое подключение ловит и его.
- 🖥️ Несколько рабочих серверов. Ключ
-debugнужен агенту на каждом сервере кластера. Если включить его только на центральном, вызовы, попавшие на второй сервер, пройдут мимо точек останова. - ⚙️ Тестовый стенд проще с одним процессом. На тестовом сервере удобно ограничить кластер одним рабочим процессом через свойства рабочего сервера в консоли администрирования. Отладка становится предсказуемой.
В режиме TCP конфигуратор соединяется с каждым rphost напрямую по порту из рабочего диапазона. Поэтому при закрытом диапазоне кластер работает, а отладка — нет. В режиме HTTP весь обмен идёт через сервер отладки, и открыть нужно один порт.
Когда отладчик не подключается
Ниже симптомы, которые встречаются чаще других, и что проверить в каждом случае.
Если точка стоит в процедуре с директивой &НаКлиенте, ключ -debug на сервере ни при чём. Такой код отлаживается в клиентском приложении, и проблему ищите в подключении клиента.
Как отлаживать фоновые задания и HTTP-сервисы
Фоновые и регламентные задания, HTTP-сервисы и веб-сервисы выполняются на сервере без интерактивного клиента. Поймать их в отладчике можно только через автоподключение.
Фоновые и регламентные задания
- В окне
Отладка → Подключение→ «Автоматическое подключение» отметьте тип «Фоновое задание». - Поставьте точку останова в процедуре, которую вызывает задание.
- Запустите задание из консоли регламентных заданий конфигурации или дождитесь расписания.
Регламентное задание с интервалом раз в сутки ждать неудобно. На время отладки поставьте ему частый запуск в копии базы или вызовите процедуру вручную из обработки с серверным вызовом. Если задание запускается кодом через ФоновыеЗадания.Выполнить, отладчик подключится к фоновому сеансу автоматически при отмеченном типе.
HTTP-сервисы и веб-сервисы
Код HTTP-сервиса выполняется в рабочем процессе кластера, а запрос приходит через веб-сервер (IIS или Apache). Чтобы его отлаживать:
- Включите на сервере ключ
-debug, как описано выше. - В автоподключении отметьте тип «HTTP-сервис» или «Web-сервис».
- Поставьте точку останова в обработчике метода.
- Отправьте запрос через Postman,
curlили браузер.
Пока вы стоите на точке, внешняя система ждёт ответ и может отвалиться по таймауту. Для долгой пошаговой отладки увеличьте таймаут на стороне клиента запроса. При публикации базы на веб-сервере в файле default.vrd можно включить отладку элементом debug — так делают, когда веб-клиент или сервисы публикуются отдельно.
Как не уронить производительность сервера во время отладки
Режим отладки сам по себе добавляет нагрузку: рабочие процессы сообщают отладчику о каждом вызове. На тестовом стенде это незаметно, на рабочем сервере под нагрузкой — ощутимо.
- 🎯 Подключайте только нужное. Автоподключение всех типов сразу заставляет отладчик цепляться к каждому фоновому заданию и каждому сеансу.
- 🧷 Условные точки останова. Через контекстное меню точки задайте условие, например
Контрагент.ИНН = "7701234567". Остановка сработает только на нужном документе, а не на каждом из 500 в цикле. - ⏱️ Замер производительности. В конфигураторе
Отладка → Замер производительностипоказывает, какие строки съели время. Это быстрее, чем шагать по коду и угадывать. - 🔒 Короткие остановки внутри транзакций. Пока вы стоите на точке внутри записи документа, блокировки держатся. Через пару минут у других пользователей пойдут ошибки ожидания блокировки.
- 🔁 Выключайте ключ после работ. Закончили отладку на рабочем сервере — уберите
-debugиз строки запуска и перезапустите службу в нерабочее время.
Режим отладки на рабочем сервере позволяет любому, у кого есть доступ к конфигуратору и сетевой доступ к кластеру, видеть значения переменных, в том числе персональные данные. Держите доступ к конфигуратору только у разработчиков.
Частые вопросы
Нужна ли отдельная лицензия для серверной отладки?
Можно ли включить отладку только для одной базы кластера?
-debug действует на весь кластер. Подключиться отладчиком к конкретной базе может только тот, у кого есть доступ к её конфигуратору.Работает ли серверная отладка в файловой базе?
-debug для файловой базы не нужен: серверный код выполняется в процессе клиента, и конфигуратор подключается к нему через Отладка → Начать отладку.Чем протокол HTTP лучше TCP?
Почему после обновления платформы отладка пропала?
-debug нужно добавить ещё раз.