Серверная отладка 1С 8.3: ключ -debug для агента, протоколы TCP и HTTP, подключение из конфигуратора
Содержание
Отладку на сервере 1С включают ключом -debug в строке запуска агента сервера ragent.exe. Затем службу перезапускают, а в конфигураторе включают автоматическое подключение к серверу. Пока ключа нет, точки останова в серверных процедурах не срабатывают: конфигуратор просто не видит серверных предметов отладки.
Порядок одинаков для Windows и Linux, отличается только место правки. Всё описанное относится к платформе 8.3 в клиент-серверном варианте и не зависит от конфигурации: БП, ЗУП и УТ отлаживаются одинаково.
Зачем включать отладку на сервере 1С и чем она отличается от файловой
В файловой базе код «на сервере» выполняется внутри клиентского процесса. Поэтому отладка там работает сразу, без настроек сервера.
В клиент-серверной базе серверный код исполняет рабочий процесс rphost на машине кластера. Чтобы отладчик конфигуратора к нему подключился, рабочие процессы должны стартовать в режиме отладки. А этот режим наследуется от агента сервера.
Когда без серверной отладки не обойтись:
- 🐞 ошибка воспроизводится только на рабочей базе, а в файловой копии её нет;
- 🧾 проведение документа падает в процедуре модуля объекта или менеджера;
- ⏰ нужно поймать фоновое или регламентное задание — они всегда выполняются на сервере;
- 🔌 отлаживается HTTP-сервис, веб-сервис или обработчик обмена, вызываемый извне;
- 🐢 нужно найти медленный фрагмент замером производительности именно в серверном контексте.
Режим отладки немного нагружает сервер и открывает дополнительный канал подключения. На рабочем сервере его включают на время разбора и выключают после.
Способы включить серверную отладку: что из них что делает
Сам режим включается в одном месте — в параметрах запуска агента. Остальные настройки нужны, чтобы к нему подключиться.
| Где | Что делаем | Обязательно? |
|---|---|---|
| Служба агента сервера (Windows) | Добавляем -debug в путь к исполняемому файлу | Да, на Windows |
| Unit systemd или файл настроек службы (Linux) | Добавляем -debug в команду запуска | Да, на Linux |
| Конфигуратор: параметры отладки | Выбираем протокол, совпадающий с сервером | Да, при HTTP |
Конфигуратор: Отладка → Подключение | Включаем автоподключение к серверу | Да |
| Консоль администрирования кластера | Только наблюдаем рабочие процессы и сеансы | Нет |
Через консоль администрирования режим отладки не включается: в свойствах кластера, рабочего сервера и информационной базы такого флажка нет. Консоль пригодится для проверки — какие рабочие процессы запущены и какие сеансы висят.
TCP или HTTP: какой протокол выбрать
У серверной отладки два протокола.
- TCP — классический вариант. Конфигуратор соединяется с рабочими процессами напрямую по портам из диапазона рабочего сервера (по умолчанию
1560:1591). - HTTP — вариант через сервер отладки
dbgs. Все предметы отладки регистрируются на нём, а конфигуратор или EDT ходит к нему по одному порту (по умолчанию1550). Его проще пропустить через межсетевой экран, и только он работает с 1С:EDT.
Для отладки из обычного конфигуратора в локальной сети подходят оба. Если между вами и сервером есть фаервол или вы работаете в EDT — берите HTTP.
Способ 1. Включение отладки на сервере 1С под Windows через параметры службы
На Windows агент сервера работает службой. Ключ дописывают в её путь к исполняемому файлу, который хранится в реестре.
Перезапуск службы агента обрывает все сеансы пользователей этого сервера. Делайте его вне рабочего времени или после предупреждения пользователей.
Шаг 1. Найдите имя службы
- Откройте
services.msc. - Найдите службу агента сервера 1С:Предприятия 8.3. На 64-битной платформе её стандартное имя
1C:Enterprise 8.3 Server Agent (x86-64). - Откройте свойства и скопируйте поле «Имя службы». Если на сервере стоит несколько версий платформы, проверьте в поле «Исполняемый файл», к какой версии относится служба.
Строку запуска можно посмотреть и из командной строки:
sc qc "1C:Enterprise 8.3 Server Agent (x86-64)"
В выводе нужна строка BINARY_PATH_NAME.
Шаг 2. Допишите ключ -debug
- Запустите
regeditот имени администратора. - Откройте ветку
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\и в ней раздел с именем службы из шага 1. - Откройте параметр
ImagePath. - Вставьте
-debugпосле пути кragent.exe, перед остальными ключами. Для HTTP-отладки —-debug -http.
Было:
"C:\Program Files\1cv8\8.3.24.1691\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Стало (TCP):
"C:\Program Files\1cv8\8.3.24.1691\bin\ragent.exe" -debug -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Стало (HTTP):
"C:\Program Files\1cv8\8.3.24.1691\bin\ragent.exe" -debug -http -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Номер версии и пути у вас будут свои — меняйте только добавленный ключ, остальное не трогайте.
Перед правкой выгрузите раздел службы в .reg-файл (правая кнопка → «Экспортировать»). Ошибка в кавычках или пути — и служба перестанет запускаться. Из сохранённого файла всё возвращается двойным щелчком.
Шаг 3. Перезапустите службу
В services.msc выполните «Перезапустить» или из командной строки администратора:
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
Если остановка зависла, подождите: агент завершает рабочие процессы и сеансы. Снимать rphost диспетчером задач посреди проведения документов не стоит.
Способ 2. Отладка на сервере 1С под Linux: файл настроек службы или unit systemd
На Linux ключ тоже передаётся агенту, но место правки зависит от того, как установлен сервер.
Старый скрипт службы srv1cv83
На платформах, где сервер стартует скриптом /etc/init.d/srv1cv83, параметры читаются из файла настроек:
- RHEL, CentOS, РЕД ОС, ALT —
/etc/sysconfig/srv1cv83; - Debian, Ubuntu, Astra —
/etc/default/srv1cv83.
В файле есть переменная режима отладки. Раскомментируйте её и задайте значение 1:
SRV1CV8_DEBUG=1
Затем перезапустите службу:
sudo systemctl restart srv1cv83
Новые версии с unit-файлом systemd
В новых версиях платформы сервер ставится как unit systemd с версией в имени. Ключ -debug дописывают в строку ExecStart. Удобнее делать это через переопределение, чтобы правка пережила обновление пакета:
systemctl list-units | grep 1cv8
sudo systemctl edit --full <имя-юнита>
В открывшемся файле найдите строку ExecStart= с путём к ragent и добавьте -debug (или -debug -http) так же, как в Windows. Сохраните и перезапустите:
sudo systemctl daemon-reload
sudo systemctl restart <имя-юнита>
Точный набор ключей в ExecStart у разных сборок отличается. Не переписывайте строку целиком — только добавьте ключ.
Способ 3. Настройка конфигуратора для подключения к серверной отладке
Сервер готов, теперь очередь конфигуратора. Без этих двух настроек остановок не будет даже при верно запущенном агенте.
Протокол отладки
В конфигураторе откройте Сервис → Параметры, вкладку отладки. Протокол должен совпадать с тем, что указан у агента:
- агент с
-debug— отладка по TCP/IP; - агент с
-debug -http— отладка по HTTP.
При смешанных настройках конфигуратор не увидит серверных предметов.
Автоматическое подключение к серверу
- Откройте конфигуратор нужной базы.
- Запустите отладку (F5) или откройте окно
Отладка → Подключение. - Нажмите «Автоматическое подключение» и отметьте предметы отладки «Сервер» и при необходимости «Фоновое задание».
- Поставьте точку останова в серверной процедуре (F9) и выполните действие в клиенте.
Клиент, запущенный не из конфигуратора, тоже можно отлаживать. Для этого его запускают с ключом /DEBUG:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S "srv1c\buh" /DEBUG
Здесь srv1c — имя сервера, buh — имя базы в кластере.
Как проверить, что сервер 1С запущен в режиме отладки
Не доверяйте реестру — проверяйте живой процесс. Служба могла не перезапуститься или запуститься старая версия.
Windows, PowerShell от администратора:
Get-CimInstance Win32_Process -Filter "Name='ragent.exe'" | Select-Object ProcessId, CommandLine
В CommandLine должен быть ключ -debug. То же видно в диспетчере задач: вкладка «Подробности», правой кнопкой по заголовку столбцов → добавить столбец «Командная строка».
Linux:
ps -ef | grep [r]agent
Для HTTP-режима дополнительно проверьте, что поднялся сервер отладки и слушает порт:
ps -ef | grep [d]bgs
ss -ltnp | grep 1550
На Windows — netstat -ano | findstr 1550.
Последняя проверка — в конфигураторе. При запущенном клиенте в окне Отладка → Подключение должны появиться серверные предметы отладки. Если там только «Тонкий клиент», сервер к отладке не подключился.
Если точки останова на сервере не срабатывают
Шаги выше выполнены, а остановки нет. Пройдитесь по симптомам.
Ещё два случая, которые встречаются на практике:
- 🖥️ В кластере несколько рабочих серверов. Ключ
-debugнужен на каждом, где выполняется код базы. Иначе остановки будут «через раз» — в зависимости от того, какой процесс взял вызов. - 🔁 После обновления платформы отладка пропала. Установщик новой версии создаёт службу со своей строкой запуска. Ключ придётся добавить заново.
Безопасность серверной отладки на рабочей базе
Отладчик на рабочем сервере — это возможность остановить чужой код и посмотреть значения переменных. А там персональные данные, суммы, пароли интеграций.
Что стоит соблюдать:
- 🔒 Включайте на время. Нашли ошибку — уберите
-debugи перезапустите службу в ближайшее окно. - 🧱 Ограничьте порты. Порт
1550и диапазон рабочих процессов открывайте на фаерволе только для адресов разработчиков, а не для всей сети. - 👥 Права в базе. Подключиться к отладке может пользователь, у которого есть доступ к конфигуратору базы. Держите роль администратора у минимума людей.
- ⏸️ Помните о блокировках. Пока выполнение стоит на точке останова, транзакция открыта, и её блокировки держат других пользователей. Не оставляйте остановку в проведении документа на полчаса посреди рабочего дня.
- 🧪 Лучше копия. Если ошибка воспроизводится на копии базы, развёрнутой на тестовом сервере, отлаживайте там. Рабочий сервер оставьте пользователям.
Точка останова в обработчике, который вызывают все пользователи, остановит каждого, у кого сработает этот код. Ставьте условные точки останова (правой кнопкой по точке → условие), например по имени текущего пользователя.
Частые вопросы
Нужно ли перезапускать службу агента, чтобы включить отладку?
-debug читается только при старте агента, поэтому без перезапуска службы режим не включится. Перезапуск обрывает сеансы пользователей.Можно ли включить серверную отладку только для одной информационной базы?
Почему отладка в файловой базе работает, а на сервере нет?
-debug у агента.Сильно ли режим отладки замедляет сервер?
Как отлаживать серверный код из 1С:EDT?
-debug -http. EDT подключается к серверу отладки по HTTP, режим TCP он не использует.