Отладка серверного кода 1С 8.3: ключ -debug у агента сервера, Windows и Linux

· 9 мин

Содержание

Чтобы включить режим отладки в 1С 8.3 на сервере, добавьте ключ -debug в строку запуска службы агента сервера ragent.exe и перезапустите службу. В Windows строка лежит в реестре, в параметре ImagePath службы «1C:Enterprise 8.3 Server Agent». В Linux ключ задают в файле настроек или unit-файле службы srv1cv8.

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

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

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

  • 🖥️ Права. Нужен администратор операционной системы на сервере 1С: правка реестра или файлов службы без них не сработает.
  • 🔢 Версия платформы. Узнайте точный номер (например, 8.3.24.1548). Конфигуратор на рабочем месте программиста должен быть той же версии, что и сервер.
  • 🏷️ Имя службы. На одном сервере бывает несколько агентов разных версий. Откройте services.msc, найдите службу агента и на вкладке «Общие» посмотрите поле «Исполняемый файл» — там текущая строка запуска.
  • 🔌 Протокол. Решите, каким протоколом будете отлаживать: TCP/IP или HTTP. Выбор зависит от сети между программистом и сервером (сравнение ниже).
  • 🕐 Окно для перезапуска. Согласуйте время с пользователями.

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

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

ПротоколКлюч у агентаКогда подходитОграничения
TCP/IP-debug или -debug -tcpПрограммист и сервер в одной локальной сети, без жёсткого межсетевого экранаНужны открытые порты рабочих процессов; через NAT и прокси работает плохо
HTTP-debug -httpОтладка через межсетевой экран, удалённо, веб-клиент, мобильные и HTTP-сервисыНужен сервер отладки dbgs, по умолчанию порт 1550

Протокол HTTP появился в 8.3 и сейчас считается основным. Если сомневаетесь — берите HTTP: он проходит через один порт, и с ним проще настроить сеть .

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

На Windows агент сервера работает как служба. Ключ -debug добавляют в её строку запуска. Удобнее всего через редактор реестра.

Способ 1. Правка ImagePath в реестре

  1. Остановите службу агента в services.msc (кнопка «Остановить»).
  2. Запустите regedit от имени администратора.
  3. Откройте ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\.
  4. Найдите раздел службы. Для 64-битного сервера он обычно называется 1C:Enterprise 8.3 Server Agent (x86-64); если агентов несколько, к имени может быть добавлен номер версии.
  5. Откройте параметр ImagePath и добавьте -debug после пути к ragent.exe.
  6. Сохраните и запустите службу.

Было:

"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"

Стало (отладка по HTTP):

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

Для TCP/IP достаточно одного -debug без -http. Остальные параметры строки не трогайте: порты 1540, 1541 и диапазон рабочих процессов должны остаться прежними.

Перед правкой скопируйте исходное значение ImagePath в текстовый файл. Если ошибётесь с кавычками, служба не стартует, и вернуть строку будет проще всего из копии.

Способ 2. Команда sc config

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

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

После binPath= обязателен пробел, а внутренние кавычки экранируются обратной косой чертой. Строку целиком берите из текущей, меняйте только ключи отладки. Затем перезапустите службу:

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

Как проверить, что ключ применился

  • Откройте Диспетчер задач → «Подробности», включите столбец «Командная строка». У процесса ragent.exe в строке должен быть -debug.
  • У процессов rphost.exe после перезапуска тоже появляется признак отладки: менеджер кластера передаёт его рабочим процессам.

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

В Linux порядок зависит от того, как установлена платформа. До версий 8.3.21 сервер запускался скриптом /etc/init.d/srv1cv83, в новых версиях — через unit-файл systemd с номером версии в имени.

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

Настройки скрипта лежат в отдельном файле: /etc/sysconfig/srv1cv83 на RHEL-подобных системах или /etc/default/srv1cv83 на Debian и Ubuntu. В нём есть переменная отладки:

SRV1CV83_DEBUG=1

Уберите символ комментария # перед строкой, поставьте 1 и перезапустите службу:

sudo /etc/init.d/srv1cv83 restart

Новые версии: служба systemd

Сначала посмотрите, как устроен unit-файл вашей версии:

systemctl list-units | grep srv1cv8
systemctl cat srv1cv8-8.3.24.1548@default

В строке ExecStart видно, какие переменные подставляются в запуск ragent. Если среди них есть SRV1CV8_DEBUG, задайте её через переопределение, не трогая исходный файл:

sudo systemctl edit srv1cv8-8.3.24.1548@default

В открывшемся редакторе:

[Service]
Environment=SRV1CV8_DEBUG=-debug -http

Затем:

sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-8.3.24.1548@default
ps aux | grep ragent

В выводе ps у процесса ragent должен появиться ключ -debug. Если переменной отладки в unit-файле нет, добавьте -debug в собственную копию ExecStart через тот же systemctl edit: сначала пустая строка ExecStart=, затем полная строка запуска с ключом.

Правка оригинального unit-файла в каталоге платформы пропадёт при переустановке. Переопределение через systemctl edit переживает обновление, но при смене версии платформы имя службы меняется — настройку придётся повторить.

На Linux чаще мешает межсетевой экран. Для HTTP-отладки откройте порт сервера отладки (по умолчанию 1550) в firewalld или ufw, но только для адресов программистов.

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

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

  1. Откройте Конфигуратор нужной базы.
  2. В меню Сервис → Параметры на вкладке «Отладка» выберите тот же протокол, что и у сервера (TCP/IP или HTTP).
  3. Запустите отладку кнопкой «Начать отладку» или клавишей F5 — клиент откроется в режиме отладки.
  4. Откройте Отладка → Подключение. В списке должны появиться предметы отладки «Сервер» для вашей базы.
  5. Чтобы серверные сеансы цеплялись сами, нажмите в этом окне «Автоматическое подключение» и отметьте нужные типы: сервер, фоновое задание, HTTP-сервис, веб-сервис.

Для HTTP при старте отладки из Конфигуратора поднимается сервер отладки dbgs. Адрес сервера отладки клиент получает автоматически, если клиент запущен из Конфигуратора.

Отладка только одной информационной базы

Ключ -debug действует на весь кластер: разрешение отладки получают все базы этого сервера. Ограничить сам ключ одной базой нельзя. Но фактически отлаживается только та база, Конфигуратор которой подключён к предметам отладки.

  • 🎯 Подключение и автоподключение настраиваются для конкретной базы в её Конфигураторе.
  • 🧑‍💻 Пользователи других баз работают как обычно: их код не останавливается, пока к ним не подключился отладчик.
  • 🧪 Для изолированной отладки удобно развернуть копию базы на отдельном тестовом кластере — тогда ключ -debug в рабочем кластере не нужен вовсе.

Отладка HTTP-сервисов и веб-публикаций

Для публикации на веб-сервере отладку включают в файле default.vrd в каталоге публикации:

<debug enable="true"
       protocol="http"
       url="http://192.168.1.10:1550"/>

Здесь url — адрес компьютера, где запущен сервер отладки (обычно машина программиста с Конфигуратором). После правки перезапустите веб-сервер или пул приложений IIS. Тот же параметр выставляется галочкой при публикации из Конфигуратора, если выбрать отладку в окне публикации.

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

Чаще всего проблема не в коде, а в несовпадении настроек. Найдите свой симптом:

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

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

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

Режим отладки — инструмент разработчика. В рабочем кластере он открывает лишние возможности и тратит ресурсы.

  • 🔓 Доступ к данным. Отладчик показывает значения переменных серверного кода, включая персональные данные и пароли интеграций. Подключиться может любой, у кого есть права на Конфигуратор базы.
  • 🐢 Производительность. Рабочие процессы с разрешённой отладкой работают медленнее. Остановка на точке останова держит транзакцию и управляемые блокировки: другие пользователи ждут, пока программист нажмёт F5.
  • 🌐 Сеть. Порт сервера отладки нельзя публиковать в интернет. Ограничьте доступ правилами межсетевого экрана по адресам.
  • 🔑 Пароль. Для HTTP-отладки у агента есть ключ -debugServerPwd: подключиться к отладке смогут только знающие пароль. Точный синтаксис для вашей версии сверьте в документации к платформе.

Практическое правило: включили отладку — разобрали проблему — убрали -debug и перезапустили службу. Держать отладку в рабочем кластере постоянно не стоит.

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

Как найти проблему на сервере без режима отладки

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

ИнструментЧто показываетНужен ли перезапуск
Журнал регистрацииОшибки, события пользователей, сеансыНет
Технологический журнал (logcfg.xml)Исключения, медленные вызовы, блокировки, запросы к СУБДНет, файл подхватывается на лету
Консоль администрирования кластераСеансы, соединения, блокировки, нагрузка рабочих процессовНет
Копия базы на тестовом сервереПолноценная отладка без рискаТолько тестового

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

Самый мощный инструмент без отладчика. Файл logcfg.xml кладут в каталог conf платформы, например C:\Program Files\1cv8\conf\. Платформа подхватывает его без перезапуска службы.

Минимальная настройка, которая пишет исключения:

<?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>

Здесь history="24" — сколько часов хранить логи. Каталог для логов выбирайте на диске с запасом места: при широких фильтрах журнал растёт на гигабайты в час. Когда проблема поймана, удалите или переименуйте logcfg.xml.

Сообщения и запись в журнал из кода

Временный вызов ЗаписьЖурналаРегистрации() в подозрительном месте серверного модуля покажет значения переменных без всякого отладчика. После диагностики такой код обязательно убирают.

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

Нужно ли перезапускать сервер Windows после добавления -debug?
Нет, перезагрузка компьютера не нужна. Достаточно перезапустить службу агента сервера 1С, но это всё равно завершит сеансы пользователей.
Можно ли включить отладку на сервере без остановки службы?
Нет. Ключ читается только при старте ragent, поэтому без перезапуска службы он не применится.
Работает ли серверная отладка в файловой базе?
В файловом варианте отдельного сервера нет: серверный код выполняется в процессе клиента, и для отладки достаточно запуска из Конфигуратора по F5.
Можно ли отлаживать сервер 1С удалённо, из дома?
Да, по протоколу HTTP, но только через VPN до сети сервера. Открывать порт сервера отладки в интернет нельзя.
Как отключить режим отладки обратно?
Удалите ключи -debug и -http из ImagePath (или переменную в настройках службы Linux) и перезапустите службу агента.