Отладка серверного кода 1С 8.3: ключ -debug у агента сервера, Windows и Linux
Содержание
Чтобы включить режим отладки в 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 в реестре
- Остановите службу агента в
services.msc(кнопка «Остановить»). - Запустите
regeditот имени администратора. - Откройте ветку
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\. - Найдите раздел службы. Для 64-битного сервера он обычно называется
1C:Enterprise 8.3 Server Agent (x86-64); если агентов несколько, к имени может быть добавлен номер версии. - Откройте параметр
ImagePathи добавьте-debugпосле пути кragent.exe. - Сохраните и запустите службу.
Было:
"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, но только для адресов программистов.
Подключение Конфигуратора к серверу отладки
Ключ на сервере только разрешает отладку. Подключаться к ней нужно из Конфигуратора, открытого на ту же информационную базу.
- Откройте Конфигуратор нужной базы.
- В меню
Сервис → Параметрына вкладке «Отладка» выберите тот же протокол, что и у сервера (TCP/IP или HTTP). - Запустите отладку кнопкой «Начать отладку» или клавишей F5 — клиент откроется в режиме отладки.
- Откройте
Отладка → Подключение. В списке должны появиться предметы отладки «Сервер» для вашей базы. - Чтобы серверные сеансы цеплялись сами, нажмите в этом окне «Автоматическое подключение» и отметьте нужные типы: сервер, фоновое задание, 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.
Сообщения и запись в журнал из кода
Временный вызов ЗаписьЖурналаРегистрации() в подозрительном месте серверного модуля покажет значения переменных без всякого отладчика. После диагностики такой код обязательно убирают.