Режим отладки на сервере 1С: где увидеть флаг -debug и как его убрать
Содержание
Отладка на сервере 1С включена, если агент сервера ragent.exe запущен с ключом -debug. Быстрее всего это проверить по командной строке процесса: на Windows через параметры службы или PowerShell, на Linux через ps. Второй способ подойдёт тому, у кого нет доступа к серверу: Конфигуратор покажет серверные предметы отладки только при включённом режиме.
Консоль кластера, rac, журнал регистрации и логи процессов отдельного флага «отладка включена» не показывают. Зато по ним видно, какой процесс смотреть и на каком сервере. Способы идут от самого надёжного к косвенным:
| Способ | Что нужно | Что даёт |
|---|---|---|
Строка запуска ragent | Доступ к серверу | Точный ответ: включена или нет |
| Конфигуратор, «Предметы отладки» | Права на Конфигуратор | Видны ли серверные предметы |
Консоль кластера, rac | Права администратора кластера | На какой машине и в каком процессе искать |
| Порт сервера отладки | Доступ к серверу | Признак HTTP-отладки |
Как устроен режим отладки на сервере 1С
Отладку включают при запуске службы агента, а не в настройках базы. Ключ -debug пишут в командную строку ragent.exe. Агент передаёт режим менеджеру кластера rmngr и рабочим процессам rphost. Поэтому режим действует на весь кластер этого агента, а не на одну информационную базу.
Протокол отладки бывает двух видов:
| Ключи в строке запуска | Протокол | Что появляется на сервере |
|---|---|---|
-debug или -debug -tcp | TCP, старый механизм | Отдельных процессов нет |
-debug -http | HTTP через сервер отладки | Процесс dbgs (сервер отладки), по умолчанию порт 1550 |
Ключа нет — серверная отладка выключена. Конфигуратор при этом откроет базу, клиентские модули отлаживаются, а точки останова в серверных процедурах не срабатывают. Это самый частый симптом, с которого всё и начинается.
Режим включается только перезапуском службы. Если ключ дописали, а службу не перезапустили, отладки нет, хотя в параметрах службы -debug уже стоит. Поэтому смотрите и параметры службы, и строку запущенного процесса.
Проверка строки запуска агента ragent на Windows и Linux
Это главный и однозначный способ проверить, включена ли отладка.
Windows: параметры службы
Служба агента для 64-разрядного сервера по умолчанию называется 1C:Enterprise 8.3 Server Agent (x86-64). Если вы ставили сервер с другим именем службы, подставьте его.
- Откройте
services.mscи найдите службу агента сервера 1С. - Откройте её свойства. В поле «Исполняемый файл» видна полная строка запуска.
- Ищите в ней
-debug.
Типичная строка с включённой отладкой выглядит так:
"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -debug -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
То же самое из командной строки:
sc qc "1C:Enterprise 8.3 Server Agent (x86-64)"
В выводе смотрите строку BINARY_PATH_NAME.
Windows: запущенный процесс
Параметры службы показывают, как она запустится в следующий раз. Чтобы увидеть, как работает агент прямо сейчас, проверьте сам процесс:
Get-CimInstance Win32_Process -Filter "Name='ragent.exe'" | Select-Object ProcessId, CommandLine
Без PowerShell подойдёт диспетчер задач: вкладка «Подробности», правый клик по заголовку таблицы, «Выбрать столбцы», включить «Командная строка».
Если -debug есть в службе, но нет в процессе — службу ещё не перезапускали. Обратный случай — кто-то запустил агент вручную из консоли, а служба стоит без ключа.
Linux
Строку запущенного процесса покажет ps:
ps -ef | grep [r]agent
Где задаётся ключ, зависит от способа установки:
- 🐧 старая схема со скриптом
init.d— переменнаяSRV1CV8_DEBUG=1в файле/etc/sysconfig/srv1cv83(RHEL-подобные системы) или/etc/default/srv1cv83(Debian, Ubuntu); - ⚙️ современная схема с юнитом systemd (
srv1cv8-8.3.xx.xxxx@.service) — посмотрите юнит командойsystemctl catс именем вашего юнита и найдите-debugв строкеExecStartили в подключаемом файле окружения.
Список установленных юнитов 1С покажет systemctl list-units | grep -i 1cv8.
Каталог srvinfo и другие файлы сервера
Частая ошибка — искать флаг отладки в каталоге srvinfo. Его там нет. В srvinfo лежат реестр кластера (reg_1541\1CV8Clst.lst), список баз, сеансовые данные и кэши. Режим отладки в эти файлы не записывается.
Связь с srvinfo одна: путь к этому каталогу задаётся ключом -d в той же строке запуска агента. Поэтому, открыв параметры службы ради пути к srvinfo, вы сразу видите и наличие -debug.
Что полезно проверить в srvinfo по ходу дела:
- 📁 сколько подкаталогов
reg_<порт>— если их несколько, на машине могут жить несколько кластеров на разных портах; - 🔎 сколько служб агента установлено — у каждой свой
srvinfo, свой порт и свой ключ-debug(или его отсутствие).
Не редактируйте и не удаляйте файлы в srvinfo, чтобы «сбросить» отладку. Это не поможет, а повреждённый реестр кластера приведёт к тому, что базы пропадут из списка кластера.
Что показывает консоль администрирования и утилита rac
Консоль администрирования серверов 1С и rac работают через агент сервера (порт 1540). Колонки или свойства «отладка включена» в них нет. Но они отвечают на вопрос, который часто важнее: на какой машине и в каких процессах работает база.
Консоль администрирования
- Разверните кластер и откройте ветку «Рабочие серверы» — увидите все машины кластера.
- Откройте ветку «Рабочие процессы» — у каждого
rphostесть PID и сервер. - Сопоставьте PID с диспетчером задач нужного сервера.
В кластере из нескольких рабочих серверов агент на каждой машине запускается своей службой. Ключ -debug проверяйте на той машине, где работают процессы нужной базы, а не только на центральном сервере.
Утилита rac
Для rac нужен запущенный сервер администрирования ras. Команды, которые помогут:
rac localhost:1545 cluster list
rac localhost:1545 process list --cluster=<uuid кластера>
Первая выводит кластеры и их идентификаторы, вторая — рабочие процессы с PID и портом. Дальше та же проверка строки запуска на нужной машине. Остальные параметры смотрите в справке rac help.
Проверка из Конфигуратора: видны ли серверные предметы отладки
Этот способ подходит разработчику без доступа к серверу.
- Откройте базу в Конфигураторе.
- Выберите меню
Отладка → Подключение. Откроется окно «Предметы отладки». - Включите автоматическое подключение для серверных предметов (кнопка «Автоматическое подключение» в этом окне) или подключите их вручную.
- Запустите клиент из Конфигуратора и выполните действие, которое вызывает серверный код.
Если отладка на сервере включена, в списке появятся серверные предметы — сеансы сервера 1С:Предприятия. Точка останова в процедуре с директивой &НаСервере сработает.
Протокол на клиенте и на сервере должен совпадать. Он задаётся в Конфигураторе в Сервис → Параметры, на закладке «Отладка». Сервер запущен с -debug -http, а Конфигуратор настроен на TCP — серверных предметов вы не увидите, хотя режим включён.
-debug или после правки службу не перезапускали. Проверьте строку запущенного процесса ragent.-debug -http, а процесс dbgs не стартовал или порт 1550 закрыт брандмауэром. Проверьте процесс и порт.Журнал регистрации и логи rphost и rmngr
Журнал регистрации пишет действия пользователей и прикладные события в конкретной базе. Режим запуска агента сервера в него не попадает. По журналу нельзя установить, включена ли отладка, и записи «включён режим отладки» вы там не найдёте.
Что журнал всё же даёт:
- 👤 видно, кто и когда открывал базу в Конфигураторе (приложение «Конфигуратор»);
- 🕐 по времени входа в Конфигуратор и времени перезапуска службы можно восстановить, кто и когда занимался отладкой на рабочей базе.
Логи процессов rphost и rmngr — это технологический журнал. Его включают файлом logcfg.xml в каталоге conf платформы, по умолчанию он выключен. Отдельного признака «сервер в режиме отладки» в нём тоже нет. Его роль другая: если после включения отладки выросло время вызовов, техжурнал покажет, какие вызовы и в каком процессе стали медленнее.
Для проверки HTTP-отладки на уровне сети достаточно посмотреть, слушается ли порт сервера отладки:
netstat -ano | findstr :1550
PID из вывода сверьте с процессом dbgs в диспетчере задач. Если порт меняли ключом -debugServerPort, ищите его.
Чем рискует рабочий сервер с включённой отладкой
Отладку ставят на тестовый контур. На рабочем сервере её оставляют только на время разбора конкретной проблемы.
| Риск | В чём проявляется |
|---|---|
| ⏱ Производительность | Процессы проверяют, нет ли подключённого отладчика и точек останова. При активной отладке остановленный на точке вызов держит блокировки, и другие пользователи ждут |
| 🔓 Доступ к данным | Подключённый отладчик видит значения переменных, а в них персональные данные, суммы, пароли из настроек обменов |
| 🧩 Стабильность | Вычисление выражений в отладчике выполняет код на сервере. Неосторожное выражение изменит данные в рабочей базе |
При HTTP-отладке задайте пароль сервера отладки ключом -debugServerPwd и закройте порт 1550 брандмауэром для всех, кроме машин разработчиков.
Как включить отладку на время разбора
Если проверка показала, что режим выключен, а разобрать ошибку нужно именно на сервере, действуйте так.
- Откройте редактор реестра и раздел
HKLM\SYSTEM\CurrentControlSet\Services\<имя службы>. - В значении
ImagePathдопишите-debugсразу после пути кragent.exe, до ключа-srvc. Для HTTP-отладки допишите-debug -http. - Перезапустите службу агента в согласованное время.
- Убедитесь, что ключ появился в строке запущенного процесса, а при HTTP-режиме стартовал
dbgs.
На Linux порядок тот же: правка файла настроек или юнита, systemctl daemon-reload, перезапуск службы, проверка через ps.
Пример строки для HTTP-отладки с паролем:
"C:\Program Files\1cv8\8.3.24.1548\bin\ragent.exe" -debug -http -debugServerPwd <пароль> -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
Пароль в строке запуска виден всем, у кого есть доступ к свойствам службы на сервере. Выдавайте такой доступ только администраторам.
Договоритесь с командой о простом правиле: кто включил отладку на рабочем сервере, тот её и выключает, а факт включения записывается в журнал изменений сервера. Так режим не остаётся включённым на месяцы после давно закрытой задачи.
Для регулярной проверки подойдёт задача планировщика или cron, которая раз в сутки снимает строку запуска ragent и шлёт уведомление, если в ней нашёлся -debug. Это одна команда из раздела про строку запуска, обёрнутая в скрипт.
Как выключить отладку
- Уберите
-debug(и-http, если был) из строки запуска. На Windows это значениеImagePathв разделе реестраHKLM\SYSTEM\CurrentControlSet\Services\<имя службы>, на Linux — файл настроек или юнит из раздела выше. - На Linux после правки юнита выполните
systemctl daemon-reload. - Перезапустите службу агента.
- Проверьте строку запущенного процесса ещё раз.
Перезапуск службы агента обрывает все сеансы пользователей на этом сервере. Несохранённые документы пропадут, фоновые задания прервутся. Делайте это вне рабочего времени и заранее предупредите пользователей.
Частые вопросы
Нужно ли включать отладку для каждой базы отдельно?
-debug действует на весь кластер агента. Все базы этого кластера становятся доступны для серверной отладки.Можно ли включить отладку без перезапуска службы?
Включена ли отладка в файловой базе?
-debug здесь не нужен.