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

· 9 мин

Содержание

Чтобы подключить отладку на сервере 1С, добавьте ключ -debug в строку запуска службы агента сервера (ragent.exe) и перезапустите службу. Для отладки по HTTP строка дополняется ключом -http, тогда агент сам поднимает сервер отладки dbgs.exe на порту 1550. После этого в Конфигураторе включите автоматическое подключение серверных предметов отладки — и точки останова в серверных модулях начнут срабатывать.

По умолчанию серверная отладка выключена, и это правильно: она замедляет рабочие процессы и открывает лишний сетевой вход. Всё ниже относится к клиент-серверному варианту платформы 8.3 (релизы 8.3.2x) на Windows Server 2016 и новее и на Linux. В файловой базе серверной части нет — там код сервера выполняется в процессе клиента, и отладка работает без настройки служб.

Подготовка окружения и прав перед включением отладки

Отладка на сервере требует перезапуска службы агента. Значит, это работа администратора, а не программиста с доступом к одной базе.

Проверьте заранее:

  • 🔑 Права в Windows или Linux. Нужен локальный администратор (или sudo), чтобы править параметры службы и перезапускать её.
  • 🔑 Доступ к Конфигуратору базы. Пользователь 1С должен иметь роль, позволяющую открыть Конфигуратор (обычно «Администратор системы» или «Полные права»).
  • 🧩 Одинаковая версия платформы. Конфигуратор и сервер должны быть одной сборки, например 8.3.24.1548 и 8.3.24.1548. При расхождении база просто не откроется в клиент-серверном режиме.
  • 🌐 Сетевые порты. Для HTTP-отладки с машины разработчика должен быть доступен порт 1550 сервера. Для TCP-отладки нужен прямой доступ к рабочим процессам — это порты из диапазона рабочего сервера (по умолчанию 1560–1591).
  • ⏱ Окно для перезапуска. Перезапуск службы обрывает сеансы всех пользователей всех баз кластера.

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

Порядок соединения клиента с сервером стоит держать в голове: клиент сначала обращается к агенту сервера (порт 1540), затем к менеджеру кластера (1541), а дальше работает с рабочими процессами из диапазона портов. Код серверных модулей выполняется именно в рабочих процессах rphost.exe. Поэтому ключ отладки ставится агенту — он передаёт режим запускаемым процессам.

Что лежит в srvinfo и почему отладку включают не там

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

Что на самом деле хранится в каталоге srvinfo (путь задаёт ключ -d в строке запуска службы):

Файл или папкаНазначениеТрогать для отладки?
reg_1541\1CV8Clst.lstРеестр кластера: базы, рабочие серверы, администраторыНет
reg_1541\<GUID базы>Служебные данные сеансов и кэш по каждой базеНет
1cv8wsrv.lstСписок кластеров агентаНет

Файлы, которые правят руками, лежат в другом месте — в папке conf установки платформы (C:\Program Files\1cv8\conf\ для всех версий или bin\conf конкретной версии):

  • 📄 logcfg.xml — настройка технологического журнала. Пригодится для анализа, об этом ниже.
  • 📄 conf.cfg — общие параметры платформы (например, каталог временных файлов).

Если вы где-то встретили совет «добавить debug в srvinfo», скорее всего имелся в виду ключ -d, который указывает на каталог srvinfo в той же строке запуска службы. Ключ -debug ставится рядом с ним.

Как включить отладку на сервере 1С: ключ -debug для службы агента

Windows: правка строки запуска службы

Служба агента обычно называется 1C:Enterprise 8.3 Server Agent (x86-64). В новых установках в имени может стоять номер версии — смотрите в оснастке services.msc.

  1. Откройте regedit от имени администратора.
  2. Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ и найдите раздел службы агента.
  3. Откройте параметр ImagePath. В нём строка вида:
"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"
  1. Допишите в конец ключи отладки. Для HTTP-отладки:
"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" -debug -http
  1. Сохраните значение и перезапустите службу в services.msc (или командами ниже).
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Проверка: в диспетчере задач после старта службы появится процесс dbgs.exe. Если его нет — служба запустилась со старой строкой или ключ записан с опечаткой.

HTTP или TCP: что выбрать

РежимКлючиКогда подходитОграничения
HTTP-debug -httpПочти всегда: один порт 1550, проходит через сетевые экраныНужен процесс dbgs.exe на сервере
TCP-debug или -debug -tcpСтарые проекты, где Конфигуратор настроен на TCPНужен доступ ко всему диапазону портов рабочих процессов

Режим сервера и режим Конфигуратора должны совпадать. Сервер в HTTP, а Конфигуратор в TCP — серверные точки останова не сработают.

Linux: systemd и старые init-скрипты

На Linux с платформой 8.3.21 и новее сервер ставится как юнит systemd. Порядок такой:

  1. Найдите имя юнита: systemctl list-units | grep srv1cv8.
  2. Посмотрите строку запуска: systemctl cat <имя юнита>.
  3. Не правьте файл поставки. Создайте переопределение через sudo systemctl edit <имя юнита>, повторите в нём ExecStart целиком и допишите -debug -http.
  4. Выполните sudo systemctl daemon-reload и sudo systemctl restart <имя юнита>.

На старых сборках с init-скриптом srv1cv83 отладку включает переменная SRV1CV8_DEBUG=1 в файле настроек службы (/etc/sysconfig/srv1cv83 или /etc/default/srv1cv83 — зависит от дистрибутива).

После правки проверьте, что ключ действительно применился: ps aux | grep ragent покажет полную строку запуска процесса.

Отладка для одного кластера или тестовой базы

Ключ -debug включает режим для всего агента — то есть для всех его кластеров и всех баз. Галочки «разрешить отладку» в свойствах отдельной базы или кластера в консоли администрирования нет.

Если отладка нужна только на тестовой копии, а рабочие базы трогать нельзя, есть два рабочих варианта:

  • 🖥 Отдельный сервер. Самый чистый путь: тестовый сервер с той же версией платформы, на нём -debug включён постоянно.
  • 🔀 Второй агент на том же сервере. Регистрируется вторая служба агента на других портах, например -port 2540 -regport 2541 -range 2560:2591 и свой каталог -d. Ключ -debug -http ставите только ей. Тестовую базу публикуете в кластере второго агента, строка подключения — Srvr="server:2541";Ref="test_base";.

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

Подключение к серверной отладке из Конфигуратора

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

  1. Откройте базу в Конфигураторе.
  2. Меню Сервис → Параметры, вкладка Запуск 1С:Предприятия.
  3. В поле режима отладки выберите тот же протокол, что на сервере (HTTP или TCP/IP).
  4. Для HTTP укажите адрес сервера отладки: http://<имя сервера>:1550.

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

Без этого шага Конфигуратор видит только клиентский сеанс, а серверный код идёт мимо точек останова.

  1. Меню Отладка → Подключение.
  2. В окне «Предметы отладки» откройте настройку автоматического подключения.
  3. Отметьте нужные типы: сервер, фоновые задания, HTTP-сервисы, веб-сервисы.
  4. Запустите клиент кнопкой Отладка → Начать отладку (F5).

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

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /S "srv1c\buh_test" /DEBUG -http -attach /DEBUGGERURL "http://srv1c:1550"

После этого сеанс появится в списке предметов отладки, и его можно подключить вручную.

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

Точки останова, табло и технологический журнал

Как ставить точки останова в серверном коде

Точка ставится клавишей F9 на строке модуля. Серверными считаются процедуры с директивами &НаСервере, &НаСервереБезКонтекста, модули менеджеров и объектов, общие модули с флажком «Сервер».

Полезные клавиши в режиме отладки:

КлавишаДействие
F9Поставить или снять точку останова
F10Шаг через вызов
F11Шаг в процедуру
Shift+F11Выйти из процедуры
Shift+F9Вычислить выражение
F5Продолжить выполнение

Для кода, который вызывается тысячи раз (проведение документа в цикле, обработчики подписок), используйте точку останова с условием — её ставят через меню Отладка. Условие пишется на встроенном языке, например Ссылка.Номер = "0000-000123".

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

Когда отладчик не подходит: технологический журнал

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

Минимальный пример: записывать все исключения на сервере, хранить 24 часа.

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\1c_techlog" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <property name="all"/>
  </log>
</config>

Журнал без фильтра по событиям быстро забивает диск. Указывайте конкретные события и короткую историю, а после разбора удаляйте logcfg.xml.

Журнал регистрации базы (меню Администрирование → Журнал регистрации есть и в пользовательском режиме, и в Конфигураторе) тоже помогает: по нему видно, какой пользователь и в каком документе получил ошибку. Дальше на этот участок кода ставите точку останова.

Почему отладка на сервере не подключается: разбор ошибок

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

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

Как выключить серверную отладку после работы

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

  1. В Конфигураторе завершите отладку: Отладка → Завершить отладку (Shift+F5).
  2. Снимите все точки останова, чтобы они не сработали при следующем запуске из Конфигуратора.
  3. Отключите автоподключение серверных предметов в Отладка → Подключение.
  4. Уберите -debug -http из ImagePath (или из переопределения systemd).
  5. В нерабочее время перезапустите службу агента. Перезапуск снова оборвёт сеансы пользователей — предупредите их заранее.
  6. Удалите или переименуйте logcfg.xml, если включали технологический журнал, и очистите каталог с логами.
  7. Закройте порт 1550 в сетевом экране, если открывали его только под отладку.

Проверка: процесса dbgs.exe на сервере больше нет, а в строке запуска ragent отсутствует -debug.

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

Сильно ли отладка тормозит сервер?
Пока к процессу не подключён отладчик, замедление небольшое, но оно есть на всех базах агента. Под точками останова сеанс разработчика стоит, а блокировки, которые он держит, ждут другие пользователи.
Можно ли отлаживать рабочую базу без перезапуска сервера?
Нет. Ключ -debug читается только при старте агента. Без перезапуска службы серверная отладка не включится.
Нужна ли отдельная лицензия для сервера отладки?
Нет. Процесс dbgs.exe входит в поставку платформы и лицензию не занимает. Лицензию занимает сам сеанс 1С, запущенный для отладки.
Как отлаживать HTTP-сервис, опубликованный на веб-сервере?
Включите автоподключение HTTP-сервисов в Конфигураторе и отправьте запрос к сервису. Если база клиент-серверная, код сервиса выполняется в рабочем процессе кластера, поэтому ключ -debug на агенте нужен и здесь.
Можно ли отлаживать сервер 1С из EDT?
Да. EDT использует тот же HTTP-сервер отладки: в конфигурации отладки указывается адрес вида http://srv1c:1550. Требования к ключу -debug -http на агенте те же.