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

· 9 мин

Содержание

Чтобы включить отладку на сервере 1С, добавьте ключ -debug в строку запуска агента сервера ragent.exe (в Windows — параметр ImagePath службы, в Linux — строка запуска юнита systemd) и перезапустите службу. После этого в конфигураторе откройте Отладка → Подключение, включите автоматическое подключение для серверных предметов отладки — и точки останова в серверных процедурах начнут срабатывать.

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

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

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

  • 🖥️ Версия платформы на сервере. Каталог вида C:\Program Files\1cv8\8.3.xx.xxxx\bin. Конфигуратор, из которого будете отлаживать, должен быть той же версии, что и сервер.
  • 🔑 Права администратора ОС на сервере: придётся менять параметры службы и перезапускать её.
  • 👥 Окно для перезапуска. Перезапуск службы агента обрывает все сеансы пользователей на этом сервере. Делайте это вне рабочего времени или предупредите людей.
  • 🧱 Сетевой доступ. Между компьютером с конфигуратором и сервером должны быть открыты порты отладки (о них — в разделе про протоколы).
  • 🧪 Где отлаживать. Лучше всего — на тестовом кластере с копией базы. Если тестового сервера нет, хотя бы на отдельной базе в том же кластере.

Файловой базе ничего из этого не нужно. Там клиент и «сервер» работают в одном процессе, и Отладка → Начать отладку (F5) в конфигураторе ловит и клиентский, и серверный код без настроек.

Протокол TCP или HTTP

Платформа 8.3 поддерживает два протокола отладки. От выбора зависит строка запуска и порты в брандмауэре.

ПротоколКлючи агентаКак работаетКогда выбирать
TCP/IP-debug или -debug -tcpПредметы отладки соединяются с конфигуратором напрямуюСервер и разработчик в одной сети, порты между ними открыты
HTTP-debug -httpПосредник — сервер отладки dbgs.exe, по умолчанию порт 1550Сервер за брандмауэром, удалённая отладка, отладка веб-клиента и HTTP-сервисов

В режиме HTTP агент сам запускает dbgs.exe из каталога bin той же версии платформы. Отдельно ставить его не нужно.

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

Агент сервера 1С в Windows работает как служба. Ключ -debug пишется в её командную строку. Есть два способа это сделать: редактор реестра и утилита sc.

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

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

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

sc query type= service state= all | findstr /i "1C:Enterprise"

Шаг 2. Посмотрите текущую строку запуска

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

В поле BINARY_PATH_NAME будет примерно такая строка:

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

Сохраните её копию в текстовый файл. Если что-то пойдёт не так, вы вернёте исходное значение за минуту.

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

Вариант А — редактор реестра.

  1. Запустите regedit от имени администратора.
  2. Перейдите в ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы>.
  3. Откройте параметр ImagePath.
  4. Сразу после пути к ragent.exe (после закрывающей кавычки) допишите -debug для TCP или -debug -http для HTTP.

Результат:

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

Вариант Б — утилита sc. Удобно, когда сервер администрируется удалённо:

sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "\"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe\" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d \"C:\Program Files\1cv8\srvinfo\""

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

Не трогайте остальные ключи строки. Случайно изменённые -regport, -port или -d приведут к тому, что агент поднимется с другим реестром кластера — и базы «пропадут» из консоли.

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

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

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

Шаг 5. Убедитесь, что флаг применился

Самая надёжная проверка — посмотреть командную строку живого процесса, а не реестр:

wmic process where "name='ragent.exe'" get commandline

Если в выводе есть -debug, агент работает в режиме отладки. Если флага нет — вы правили не ту службу (на сервере бывает несколько версий платформы) или служба не перезапускалась. При HTTP-отладке в диспетчере задач дополнительно появится процесс dbgs.exe.

Отладка на сервере 1С под Linux

В Linux логика та же: ключ -debug попадает в командную строку ragent. Отличается только место, где эта строка задаётся.

Платформа с юнитом systemd

В свежих версиях 8.3 сервер ставится вместе с юнитом systemd. Найдите его имя:

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

В выводе systemctl cat найдите строку ExecStart с вызовом ragent. Чтобы не править файл пакета (он перезапишется при обновлении), создайте переопределение:

sudo systemctl edit <имя-юнита>

В открывшемся редакторе сначала очистите ExecStart, затем задайте полную строку с флагом:

[Service]
ExecStart=
ExecStart=<исходная строка ExecStart> -debug -http

Затем примените изменения:

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

Старые версии со скриптом srv1cv83

На серверах, где агент запускается init-скриптом srv1cv83, режим отладки включается переменной в файле настроек скрипта. В дистрибутивах семейства RHEL это /etc/sysconfig/srv1cv83, в Debian и Ubuntu — /etc/default/srv1cv83:

SRV1CV8_DEBUG=1

После правки перезапустите службу: sudo service srv1cv83 restart.

Проверка на Linux

ps -ef | grep [r]agent

В командной строке процесса должен стоять -debug. Если используете HTTP, проверьте, что сервер отладки слушает порт:

ss -ltnp | grep 1550

Подключение конфигуратора к серверным предметам отладки

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

Выбор протокола в конфигураторе

Протокол в конфигураторе должен совпадать с тем, что задан у агента. Он выбирается в Сервис → Параметры, в разделе запуска 1С:Предприятия: режим отладки TCP или HTTP. Для HTTP дополнительно указывается адрес сервера отладки, например http://srv-1c:1550.

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

  1. Откройте конфигуратор нужной базы.
  2. Выберите Отладка → Подключение.
  3. Нажмите «Автоматическое подключение» и отметьте типы предметов отладки:
    • 🖥️ Сервер — код в модулях с &НаСервере, общих серверных модулях, модулях объектов;
    • ⏱️ Фоновое задание — регламентные и фоновые задания;
    • 🌐 Веб-сервис и HTTP-сервис — если отлаживаете публикации;
    • 💻 Тонкий клиент — клиентская часть.
  4. Запустите отладку (Отладка → Начать отладку, F5) или подключитесь к уже открытому сеансу пользователя.

В окне «Предметы отладки» появятся процессы, к которым подключился конфигуратор. Если там пусто — проблема в флаге, протоколе или сети.

Ключи запуска клиента: /DEBUG и адрес отладчика

Ключи в ярлыке 1cv8.exe или 1cv8c.exe сами по себе серверную отладку не включают. Они разрешают отладку клиентского приложения и подсказывают ему, к какому отладчику подключаться.

  • /DEBUG — клиент запускается с разрешённой отладкой.
  • /DEBUG -http вместе с /DEBUGGERURL "http://srv-1c:1550" — клиент сам регистрируется на сервере отладки.

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

Почему точки останова не срабатывают: разбор ошибок

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

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

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

Режим отладки на сервере — инструмент для теста, а не постоянная настройка. Риски вполне конкретные.

  • ⛔ Остановленный пользователь. Точка останова в серверной процедуре замораживает вызов пользователя, который в неё попал. В рабочей базе это может быть бухгалтер, проводящий документ, или регламентное задание обмена.
  • 🔓 Чтение данных. В отладчике видны значения переменных, включая персональные данные и пароли в коде. Доступ к отладке фактически равен доступу к данным всех баз кластера.
  • 🧱 Открытые порты. Порт сервера отладки и порты TCP-отладки не должны быть доступны из интернета.
  • 🐢 Нагрузка. Отладочный режим добавляет накладные расходы рабочим процессам. На загруженном сервере это заметно.

Практические правила:

  1. Отлаживайте на копии базы, развёрнутой на тестовом кластере.
  2. Если приходится отлаживать на рабочем сервере — заранее договоритесь о времени, ставьте точки останова с условием (по пользователю или значению параметра), чтобы не ловить чужие вызовы.
  3. Ограничьте доступ к порту отладки правилом брандмауэра: только IP машины разработчика.
  4. Закончив, уберите -debug из строки запуска и снова перезапустите службу в нерабочее время.

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

Чем заменить отладчик на сервере

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

ИнструментЧто даётКогда удобен
Замер производительности (Отладка → Замер производительности)Время выполнения по строкам кодаМедленный документ или отчёт
Технологический журнал (logcfg.xml в каталоге conf платформы)События сервера: исключения, запросы, блокировки, взаимоблокировкиОшибки, которые не воспроизводятся под отладчиком
Журнал регистрацииКто, когда и с какой ошибкойПервичный разбор жалобы пользователя
Сообщения в коде во временном расширенииВывод значений без остановкиНельзя останавливать рабочие процессы
1С:EDTСобственный отладчик, работает по HTTPРазработка в EDT вместо конфигуратора

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

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

Нужно ли перезапускать сервер, чтобы включить отладку?
Да. Ключ -debug читается только при старте агента ragent, поэтому службу нужно перезапустить. Перезапуск обрывает сеансы пользователей.
Можно ли включить отладку только для одной базы кластера?
Нет. Флаг действует на весь кластер. Чтобы изолировать отладку, разверните базу на отдельном тестовом кластере.
Какой порт открыть для удалённой HTTP-отладки?
По умолчанию сервер отладки dbgs.exe слушает порт 1550. Откройте его только для IP компьютера разработчика.
Подходит ли HTTP-отладка для веб-клиента и HTTP-сервисов?
Да, для отладки публикаций на веб-сервере обычно используют именно протокол HTTP: так предметы отладки находят отладчик через сервер отладки.
Сохранится ли флаг -debug после обновления платформы?
Обычно нет: новая версия ставит свою службу со своей строкой запуска. После обновления проверьте командную строку ragent и при необходимости добавьте флаг снова.