Серверная отладка 1С 8.3: ключ -debug, протокол и точки останова
Содержание
Чтобы включить отладчик на сервере 1С, агент сервера ragent нужно запустить с ключом -debug и перезапустить службу. Галочка в конфигураторе сама по себе ничего не даст: пока служба работает без этого ключа, точки останова в серверных процедурах просто проскакивают.
Частое заблуждение — искать «кнопку отладки» в консоли администрирования кластера. Её там нет. Режим задаётся строкой запуска службы, а уже потом в конфигураторе настраивается автоматическое подключение серверных предметов отладки. Ниже весь путь для 1С:Предприятия 8.3 в клиент-серверном варианте, под Windows и Linux.
Почему серверный код не отлаживается «из коробки»
В файловой базе серверный код выполняется в том же процессе, что и клиент. Поэтому там отладка работает сразу: поставили точку останова в процедуре &НаСервере — и конфигуратор остановится на ней.
В клиент-серверной базе всё иначе. Серверные вызовы обрабатывают рабочие процессы rphost на сервере 1С. Это отдельные процессы на другой машине, и по умолчанию они не дают к себе подключаться отладчику. Разрешение выдаёт агент сервера при старте, если в его командной строке есть -debug.
Отсюда два обязательных условия:
- 🖥️ служба агента сервера запущена в режиме отладки;
- 🔌 конфигуратор подключил серверные предметы отладки — вручную или автоматически.
Если не выполнено хотя бы одно, клиентские точки останова срабатывают, а серверные нет. По этому признаку проблему и узнают.
Перезапуск службы агента обрывает все сеансы пользователей на этом сервере. Делайте это вне рабочего времени или на тестовом сервере.
Включение отладки на сервере 1С в Windows
На Windows сервер 1С работает как служба. Её командная строка хранится в реестре, в параметре ImagePath.
Шаг 1. Узнайте имя службы
- Откройте
services.msc. - Найдите службу агента сервера 1С. Обычно её отображаемое имя начинается с
1C:Enterprise 8.3 Server Agent. - Откройте свойства и скопируйте поле «Имя службы» — оно понадобится для поиска в реестре.
Если на сервере стоит несколько версий платформы, служб может быть несколько. Правьте ту, у которой в «Исполняемом файле» указан нужный номер платформы.
Шаг 2. Добавьте ключ -debug
- Запустите
regeditот имени администратора. - Перейдите в
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы>. - Откройте параметр
ImagePathи допишите в конец строки-debugчерез пробел.
Было и стало выглядит примерно так (номер платформы и порты у вас свои):
"C:\Program Files\1cv8\8.3.24.1467\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.1467\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
Не трогайте остальные параметры строки и кавычки вокруг путей. Лишний пробел внутри пути или потерянная кавычка — и служба не стартует.
Для отладки по протоколу HTTP добавьте -debug -http вместо просто -debug. Подробнее о выборе протокола — в разделе про конфигуратор.
Шаг 3. Перезапустите службу и проверьте
Перезапустите службу в services.msc. Затем убедитесь, что ключ действительно применился. Самый быстрый способ — PowerShell:
Get-CimInstance Win32_Process -Filter "name='ragent.exe'" | Select-Object ProcessId, CommandLine
В выводе строка запуска должна содержать -debug. Если ключа нет — вы правили не ту службу или служба не перезапускалась.
То же самое видно в диспетчере задач: на вкладке «Подробности» включите столбец «Командная строка».
Как включить отладку на сервере 1С под Linux
Под Linux порядок тот же: ключ -debug должен попасть в строку запуска ragent. Где его прописать, зависит от того, как служба установлена.
| Способ запуска | Где включить отладку |
|---|---|
Классический скрипт srv1cv83 (init.d) | в файле настроек: /etc/sysconfig/srv1cv83 (RHEL-подобные) или /etc/default/srv1cv83 (Debian, Ubuntu) — параметр SRV1CV8_DEBUG=1 |
| Unit systemd в новых версиях платформы | в строке запуска ragent в unit-файле службы — через переопределение systemctl edit |
Для варианта с init.d после правки файла перезапустите службу:
sudo systemctl restart srv1cv83
Для systemd сначала найдите unit и посмотрите, как в нём формируется команда:
systemctl list-units --type=service | grep -i 1c
systemctl cat <имя-юнита>
Если в unit предусмотрена переменная для режима отладки, задайте её в переопределении. Если нет — переопределите строку ExecStart, добавив -debug. Потом выполните sudo systemctl daemon-reload и перезапуск службы. Проверка — ps -ef | grep ragent: в строке процесса должен быть ключ.
Не правьте сам unit-файл из каталога платформы: при установке следующей версии он перезапишется. Переопределение через systemctl edit сохраняется.
Подключение конфигуратора к серверу: TCP или HTTP
После перезапуска службы сервер готов к отладке. Теперь отладчик нужно связать с серверными процессами.
Два протокола отладки
| Протокол | Как включается на сервере | Когда выбирать |
|---|---|---|
| TCP | -debug | локальная сеть без жёстких ограничений между сервером и рабочим местом разработчика |
| HTTP | -debug -http | между сервером и разработчиком межсетевой экран или маршрутизация; нужна отладка из EDT |
При HTTP к процессу отладки добавляется сервер отладки dbgs. Через него идёт весь обмен, поэтому в межсетевом экране достаточно открыть его порт. По умолчанию это 1550. Адрес и порт меняют ключами -debugServerAddr и -debugServerPort в строке запуска агента.
Протокол, выбранный в конфигураторе, должен совпадать с тем, что включён на сервере. Его задают в параметрах конфигуратора (Сервис → Параметры), там же, где настройки запуска и отладки.
Автоматическое подключение серверных предметов отладки
Это шаг, который чаще всего пропускают.
- Откройте базу в конфигураторе.
- Выберите
Отладка → Подключение. - Нажмите «Автоматическое подключение».
- Отметьте «Сервер». Если нужно ловить регламентные задания, веб-сервисы или HTTP-сервисы — отметьте и их.
- Запустите отладку клавишей
F5или подключитесь к уже запущенному сеансу через то же окно «Подключение».
В списке предметов отладки должна появиться строка с типом «Сервер». Если её нет, сервер не в режиме отладки или конфигуратор не достучался до него по сети.
Какие права и доступы нужны для отладки
Права здесь трёх уровней, и каждый проверяется отдельно.
Операционная система. Изменить строку запуска службы и перезапустить её может только локальный администратор сервера (в Linux — пользователь с sudo). Пользователю, под которым работает служба, ничего дополнительно выдавать не нужно.
Сеть. При TCP рабочий процесс и отладчик обмениваются данными напрямую, поэтому рабочее место разработчика и сервер должны видеть друг друга. При HTTP достаточно доступа к порту сервера отладки. Если между ними межсетевой экран, проще перейти на HTTP, чем открывать диапазоны портов.
Информационная база. Отладку ведут из конфигуратора, а открыть конфигуратор может только пользователь с административной ролью. Для обычного пользователя базы ничего не меняется: он работает как раньше, его сеанс просто становится доступен для подключения отладчика.
Любой, кто может подключиться отладчиком, видит значения переменных в серверном коде. А это все данные, которые этот код читает: зарплаты, контрагенты, пароли в открытом виде, если они где-то так хранятся. Не включайте -debug на рабочем сервере без необходимости и не оставляйте его «на всякий случай».
Отладчик на сервере 1С не срабатывает: причины и решения
Чаще всего жалоба одна: «точка останова стоит, а отладчик не останавливается». Найдите свой симптом.
Ещё одна причина — сама процедура выполняется не там, где вы думаете. Код в модуле формы без директивы компиляции работает на клиенте. Общий модуль без флага «Сервер» на сервер не попадёт. Проверьте директиву над процедурой и свойства модуля.
Отладка в рабочей базе с пользователями: чем рискуете
Отлаживать рабочую базу технически можно. Но у этого есть последствия, о которых стоит знать заранее.
- ⏸️ Остановленный вызов держит всё, что успел захватить. Если точка останова сработала внутри транзакции, управляемые блокировки остаются до продолжения. Другие пользователи, которые обращаются к тем же данным, ждут, а потом получают ошибку по таймауту блокировки.
- 👥 Чужие сеансы. Если подключены серверные предметы отладки других пользователей, точка останова в общем модуле остановит и их вызовы. Человек увидит «зависшую» программу.
- 🐢 Нагрузка. Режим отладки добавляет рабочим процессам накладные расходы. На одной сессии это незаметно, на сервере с сотнями пользователей — уже нет.
- 🔁 Перезапуск службы. Включение и выключение
-debugтребует перезапуска агента, то есть разрыва всех сеансов.
Безопаснее работать на копии: выгрузите базу, разверните её на тестовом сервере или в отдельной информационной базе на том же кластере и отлаживайте там. Если ошибка воспроизводится только в рабочей базе — договоритесь о технологическом окне, отлаживайте под своим пользователем и ставьте точки останова вне транзакций.
Точку останова можно сделать условной: правой кнопкой по точке → условие, например Пользователи.ТекущийПользователь().Наименование = "Иванов". Тогда чужие вызовы через эту строку пройдут без остановки.
Чем ещё отладить серверный код без отладчика
Иногда включить -debug нельзя: нет прав на сервер, нет окна для перезапуска или ошибка проявляется раз в сутки. Тогда помогают другие инструменты.
| Инструмент | Что даёт | Когда уместен |
|---|---|---|
| Запись в журнал регистрации | ЗаписьЖурналаРегистрации() фиксирует значения в нужной точке кода | ошибка редкая, нужно поймать данные в момент сбоя |
| Технологический журнал | подробный лог платформы через logcfg.xml: исключения, блокировки, долгие запросы | ошибки платформы, взаимоблокировки, «тормоза» |
| Замер производительности | меню Отладка → Замер производительности показывает время каждой строки | медленная процедура, нужно найти узкое место |
| Отладка в файловой копии | загрузите .dt в файловую базу — серверный код отлаживается без настройки сервера | логика не зависит от клиент-серверных особенностей |
| Сообщения пользователю | Сообщить() или объект СообщениеПользователю из серверной процедуры выводит текст на клиент | быстрая проверка значения в интерактивном сценарии |
Технологический журнал включают на сервере файлом logcfg.xml в каталоге conf платформы. Он пишет много данных, поэтому задавайте фильтры по событиям и не оставляйте его включённым надолго — диск заполняется быстро.
Частые вопросы
Нужен ли ключ -debug для файловой базы?
Можно ли включить отладку без перезапуска службы?
-debug службу нужно перезапустить.Как отладить внешнюю обработку на сервере?
Опасно ли оставлять -debug на рабочем сервере постоянно?
Работает ли отладка на сервере из 1C:EDT?
-debug -http.