Серверная отладка 1С:Предприятия 8.3: ключ -debug у агента, настройки конфигуратора и предметы отладки

· 9 мин

Содержание

Чтобы подключить отладку на сервере 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

  1. Остановите службу агента в services.msc.
  2. Откройте regedit и перейдите в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.
  3. Найдите раздел службы 1С. Его имя обычно начинается с 1C:Enterprise 8.3 Server Agent.
  4. Откройте параметр ImagePath и допишьте -debug после -agent.
  5. Запустите службу и проверьте, что она поднялась без ошибок.

Строка запуска до и после правки выглядит так:

"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 и перезапустите службу.

Настройка конфигуратора для серверной отладки

Когда агент запущен с ключом, конфигуратор нужно настроить на тот же протокол.

  1. Откройте базу в конфигураторе.
  2. Перейдите в Сервис → Параметры → вкладка «Отладка».
  3. Выберите протокол отладки: TCP/IP или HTTP. Он должен совпадать с тем, в каком режиме запущен сервер.
  4. Для HTTP укажите адрес сервера отладки, например http://srv1c:1550.
  5. Откройте Отладка → Подключение. Появится окно предметов отладки.
  6. Нажмите «Автоматическое подключение» и отметьте нужные типы: сервер, фоновое задание, HTTP-сервис, веб-сервис, клиентские приложения.
  7. Запустите клиент кнопкой Отладка → Начать отладку или подключитесь к уже открытому сеансу.

После этого поставьте точку останова (F9) в серверной процедуре и выполните действие в клиенте. Если всё настроено, конфигуратор выйдет на передний план со строкой, подсвеченной жёлтым.

Серверная отладка готова, если
Выполнено: 0 / 6

Другие способы подключить отладчик

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

СпособКогда подходитОграничения
Ключ -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-сервисы и веб-сервисы выполняются на сервере без интерактивного клиента. Поймать их в отладчике можно только через автоподключение.

Фоновые и регламентные задания

  1. В окне Отладка → Подключение → «Автоматическое подключение» отметьте тип «Фоновое задание».
  2. Поставьте точку останова в процедуре, которую вызывает задание.
  3. Запустите задание из консоли регламентных заданий конфигурации или дождитесь расписания.

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

HTTP-сервисы и веб-сервисы

Код HTTP-сервиса выполняется в рабочем процессе кластера, а запрос приходит через веб-сервер (IIS или Apache). Чтобы его отлаживать:

  1. Включите на сервере ключ -debug, как описано выше.
  2. В автоподключении отметьте тип «HTTP-сервис» или «Web-сервис».
  3. Поставьте точку останова в обработчике метода.
  4. Отправьте запрос через Postman, curl или браузер.

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

Как не уронить производительность сервера во время отладки

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

  • 🎯 Подключайте только нужное. Автоподключение всех типов сразу заставляет отладчик цепляться к каждому фоновому заданию и каждому сеансу.
  • 🧷 Условные точки останова. Через контекстное меню точки задайте условие, например Контрагент.ИНН = "7701234567". Остановка сработает только на нужном документе, а не на каждом из 500 в цикле.
  • ⏱️ Замер производительности. В конфигураторе Отладка → Замер производительности показывает, какие строки съели время. Это быстрее, чем шагать по коду и угадывать.
  • 🔒 Короткие остановки внутри транзакций. Пока вы стоите на точке внутри записи документа, блокировки держатся. Через пару минут у других пользователей пойдут ошибки ожидания блокировки.
  • 🔁 Выключайте ключ после работ. Закончили отладку на рабочем сервере — уберите -debug из строки запуска и перезапустите службу в нерабочее время.

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

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

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