Серверная отладка 1С 8.3: ключ -debug, протокол и точки останова

· 9 мин

Содержание

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

Частое заблуждение — искать «кнопку отладки» в консоли администрирования кластера. Её там нет. Режим задаётся строкой запуска службы, а уже потом в конфигураторе настраивается автоматическое подключение серверных предметов отладки. Ниже весь путь для 1С:Предприятия 8.3 в клиент-серверном варианте, под Windows и Linux.

Почему серверный код не отлаживается «из коробки»

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

В клиент-серверной базе всё иначе. Серверные вызовы обрабатывают рабочие процессы rphost на сервере 1С. Это отдельные процессы на другой машине, и по умолчанию они не дают к себе подключаться отладчику. Разрешение выдаёт агент сервера при старте, если в его командной строке есть -debug.

Отсюда два обязательных условия:

  • 🖥️ служба агента сервера запущена в режиме отладки;
  • 🔌 конфигуратор подключил серверные предметы отладки — вручную или автоматически.

Если не выполнено хотя бы одно, клиентские точки останова срабатывают, а серверные нет. По этому признаку проблему и узнают.

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

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

На Windows сервер 1С работает как служба. Её командная строка хранится в реестре, в параметре ImagePath.

Шаг 1. Узнайте имя службы

  1. Откройте services.msc.
  2. Найдите службу агента сервера 1С. Обычно её отображаемое имя начинается с 1C:Enterprise 8.3 Server Agent.
  3. Откройте свойства и скопируйте поле «Имя службы» — оно понадобится для поиска в реестре.

Если на сервере стоит несколько версий платформы, служб может быть несколько. Правьте ту, у которой в «Исполняемом файле» указан нужный номер платформы.

Шаг 2. Добавьте ключ -debug

  1. Запустите regedit от имени администратора.
  2. Перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы>.
  3. Откройте параметр ImagePath и допишите в конец строки -debug через пробел.

Было и стало выглядит примерно так (номер платформы и порты у вас свои):

"C:\Program Files\1cv8\8.3.24.1467\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.1467\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug

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

Для отладки по протоколу HTTP добавьте -debug -http вместо просто -debug. Подробнее о выборе протокола — в разделе про конфигуратор.

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

Перезапустите службу в services.msc. Затем убедитесь, что ключ действительно применился. Самый быстрый способ — PowerShell:

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

В выводе строка запуска должна содержать -debug. Если ключа нет — вы правили не ту службу или служба не перезапускалась.

То же самое видно в диспетчере задач: на вкладке «Подробности» включите столбец «Командная строка».

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

Под Linux порядок тот же: ключ -debug должен попасть в строку запуска ragent. Где его прописать, зависит от того, как служба установлена.

Способ запускаГде включить отладку
Классический скрипт srv1cv83 (init.d)в файле настроек: /etc/sysconfig/srv1cv83 (RHEL-подобные) или /etc/default/srv1cv83 (Debian, Ubuntu) — параметр SRV1CV8_DEBUG=1
Unit systemd в новых версиях платформыв строке запуска ragent в unit-файле службы — через переопределение systemctl edit

Для варианта с init.d после правки файла перезапустите службу:

sudo systemctl restart srv1cv83

Для systemd сначала найдите unit и посмотрите, как в нём формируется команда:

systemctl list-units --type=service | grep -i 1c
systemctl cat <имя-юнита>

Если в unit предусмотрена переменная для режима отладки, задайте её в переопределении. Если нет — переопределите строку ExecStart, добавив -debug. Потом выполните sudo systemctl daemon-reload и перезапуск службы. Проверка — ps -ef | grep ragent: в строке процесса должен быть ключ.

Не правьте сам unit-файл из каталога платформы: при установке следующей версии он перезапишется. Переопределение через systemctl edit сохраняется.

Подключение конфигуратора к серверу: TCP или HTTP

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

Два протокола отладки

ПротоколКак включается на сервереКогда выбирать
TCP-debugлокальная сеть без жёстких ограничений между сервером и рабочим местом разработчика
HTTP-debug -httpмежду сервером и разработчиком межсетевой экран или маршрутизация; нужна отладка из EDT

При HTTP к процессу отладки добавляется сервер отладки dbgs. Через него идёт весь обмен, поэтому в межсетевом экране достаточно открыть его порт. По умолчанию это 1550. Адрес и порт меняют ключами -debugServerAddr и -debugServerPort в строке запуска агента.

Протокол, выбранный в конфигураторе, должен совпадать с тем, что включён на сервере. Его задают в параметрах конфигуратора (Сервис → Параметры), там же, где настройки запуска и отладки.

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

Это шаг, который чаще всего пропускают.

  1. Откройте базу в конфигураторе.
  2. Выберите Отладка → Подключение.
  3. Нажмите «Автоматическое подключение».
  4. Отметьте «Сервер». Если нужно ловить регламентные задания, веб-сервисы или HTTP-сервисы — отметьте и их.
  5. Запустите отладку клавишей F5 или подключитесь к уже запущенному сеансу через то же окно «Подключение».

В списке предметов отладки должна появиться строка с типом «Сервер». Если её нет, сервер не в режиме отладки или конфигуратор не достучался до него по сети.

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

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

Права здесь трёх уровней, и каждый проверяется отдельно.

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

Сеть. При TCP рабочий процесс и отладчик обмениваются данными напрямую, поэтому рабочее место разработчика и сервер должны видеть друг друга. При HTTP достаточно доступа к порту сервера отладки. Если между ними межсетевой экран, проще перейти на HTTP, чем открывать диапазоны портов.

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

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

Отладчик на сервере 1С не срабатывает: причины и решения

Чаще всего жалоба одна: «точка останова стоит, а отладчик не останавливается». Найдите свой симптом.

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

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

Отладка в рабочей базе с пользователями: чем рискуете

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

  • ⏸️ Остановленный вызов держит всё, что успел захватить. Если точка останова сработала внутри транзакции, управляемые блокировки остаются до продолжения. Другие пользователи, которые обращаются к тем же данным, ждут, а потом получают ошибку по таймауту блокировки.
  • 👥 Чужие сеансы. Если подключены серверные предметы отладки других пользователей, точка останова в общем модуле остановит и их вызовы. Человек увидит «зависшую» программу.
  • 🐢 Нагрузка. Режим отладки добавляет рабочим процессам накладные расходы. На одной сессии это незаметно, на сервере с сотнями пользователей — уже нет.
  • 🔁 Перезапуск службы. Включение и выключение -debug требует перезапуска агента, то есть разрыва всех сеансов.

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

Точку останова можно сделать условной: правой кнопкой по точке → условие, например Пользователи.ТекущийПользователь().Наименование = "Иванов". Тогда чужие вызовы через эту строку пройдут без остановки.

Чем ещё отладить серверный код без отладчика

Иногда включить -debug нельзя: нет прав на сервер, нет окна для перезапуска или ошибка проявляется раз в сутки. Тогда помогают другие инструменты.

ИнструментЧто даётКогда уместен
Запись в журнал регистрацииЗаписьЖурналаРегистрации() фиксирует значения в нужной точке кодаошибка редкая, нужно поймать данные в момент сбоя
Технологический журналподробный лог платформы через logcfg.xml: исключения, блокировки, долгие запросыошибки платформы, взаимоблокировки, «тормоза»
Замер производительностименю Отладка → Замер производительности показывает время каждой строкимедленная процедура, нужно найти узкое место
Отладка в файловой копиизагрузите .dt в файловую базу — серверный код отлаживается без настройки сервералогика не зависит от клиент-серверных особенностей
Сообщения пользователюСообщить() или объект СообщениеПользователю из серверной процедуры выводит текст на клиентбыстрая проверка значения в интерактивном сценарии

Технологический журнал включают на сервере файлом logcfg.xml в каталоге conf платформы. Он пишет много данных, поэтому задавайте фильтры по событиям и не оставляйте его включённым надолго — диск заполняется быстро.

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

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