Режим отладки на сервере 1С: где увидеть флаг -debug и как его убрать

· 9 мин

Содержание

Отладка на сервере 1С включена, если агент сервера ragent.exe запущен с ключом -debug. Быстрее всего это проверить по командной строке процесса: на Windows через параметры службы или PowerShell, на Linux через ps. Второй способ подойдёт тому, у кого нет доступа к серверу: Конфигуратор покажет серверные предметы отладки только при включённом режиме.

Консоль кластера, rac, журнал регистрации и логи процессов отдельного флага «отладка включена» не показывают. Зато по ним видно, какой процесс смотреть и на каком сервере. Способы идут от самого надёжного к косвенным:

СпособЧто нужноЧто даёт
Строка запуска ragentДоступ к серверуТочный ответ: включена или нет
Конфигуратор, «Предметы отладки»Права на КонфигураторВидны ли серверные предметы
Консоль кластера, racПрава администратора кластераНа какой машине и в каком процессе искать
Порт сервера отладкиДоступ к серверуПризнак HTTP-отладки

Как устроен режим отладки на сервере 1С

Отладку включают при запуске службы агента, а не в настройках базы. Ключ -debug пишут в командную строку ragent.exe. Агент передаёт режим менеджеру кластера rmngr и рабочим процессам rphost. Поэтому режим действует на весь кластер этого агента, а не на одну информационную базу.

Протокол отладки бывает двух видов:

Ключи в строке запускаПротоколЧто появляется на сервере
-debug или -debug -tcpTCP, старый механизмОтдельных процессов нет
-debug -httpHTTP через сервер отладкиПроцесс dbgs (сервер отладки), по умолчанию порт 1550

Ключа нет — серверная отладка выключена. Конфигуратор при этом откроет базу, клиентские модули отлаживаются, а точки останова в серверных процедурах не срабатывают. Это самый частый симптом, с которого всё и начинается.

Режим включается только перезапуском службы. Если ключ дописали, а службу не перезапустили, отладки нет, хотя в параметрах службы -debug уже стоит. Поэтому смотрите и параметры службы, и строку запущенного процесса.

Проверка строки запуска агента ragent на Windows и Linux

Это главный и однозначный способ проверить, включена ли отладка.

Windows: параметры службы

Служба агента для 64-разрядного сервера по умолчанию называется 1C:Enterprise 8.3 Server Agent (x86-64). Если вы ставили сервер с другим именем службы, подставьте его.

  1. Откройте services.msc и найдите службу агента сервера 1С.
  2. Откройте её свойства. В поле «Исполняемый файл» видна полная строка запуска.
  3. Ищите в ней -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). Колонки или свойства «отладка включена» в них нет. Но они отвечают на вопрос, который часто важнее: на какой машине и в каких процессах работает база.

Консоль администрирования

  1. Разверните кластер и откройте ветку «Рабочие серверы» — увидите все машины кластера.
  2. Откройте ветку «Рабочие процессы» — у каждого rphost есть PID и сервер.
  3. Сопоставьте PID с диспетчером задач нужного сервера.

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

Утилита rac

Для rac нужен запущенный сервер администрирования ras. Команды, которые помогут:

rac localhost:1545 cluster list
rac localhost:1545 process list --cluster=<uuid кластера>

Первая выводит кластеры и их идентификаторы, вторая — рабочие процессы с PID и портом. Дальше та же проверка строки запуска на нужной машине. Остальные параметры смотрите в справке rac help.

Проверка из Конфигуратора: видны ли серверные предметы отладки

Этот способ подходит разработчику без доступа к серверу.

  1. Откройте базу в Конфигураторе.
  2. Выберите меню Отладка → Подключение. Откроется окно «Предметы отладки».
  3. Включите автоматическое подключение для серверных предметов (кнопка «Автоматическое подключение» в этом окне) или подключите их вручную.
  4. Запустите клиент из Конфигуратора и выполните действие, которое вызывает серверный код.

Если отладка на сервере включена, в списке появятся серверные предметы — сеансы сервера 1С:Предприятия. Точка останова в процедуре с директивой &НаСервере сработает.

Протокол на клиенте и на сервере должен совпадать. Он задаётся в Конфигураторе в Сервис → Параметры, на закладке «Отладка». Сервер запущен с -debug -http, а Конфигуратор настроен на TCP — серверных предметов вы не увидите, хотя режим включён.

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

Журнал регистрации и логи rphost и rmngr

Журнал регистрации пишет действия пользователей и прикладные события в конкретной базе. Режим запуска агента сервера в него не попадает. По журналу нельзя установить, включена ли отладка, и записи «включён режим отладки» вы там не найдёте.

Что журнал всё же даёт:

  • 👤 видно, кто и когда открывал базу в Конфигураторе (приложение «Конфигуратор»);
  • 🕐 по времени входа в Конфигуратор и времени перезапуска службы можно восстановить, кто и когда занимался отладкой на рабочей базе.

Логи процессов rphost и rmngr — это технологический журнал. Его включают файлом logcfg.xml в каталоге conf платформы, по умолчанию он выключен. Отдельного признака «сервер в режиме отладки» в нём тоже нет. Его роль другая: если после включения отладки выросло время вызовов, техжурнал покажет, какие вызовы и в каком процессе стали медленнее.

Для проверки HTTP-отладки на уровне сети достаточно посмотреть, слушается ли порт сервера отладки:

netstat -ano | findstr :1550

PID из вывода сверьте с процессом dbgs в диспетчере задач. Если порт меняли ключом -debugServerPort, ищите его.

Чем рискует рабочий сервер с включённой отладкой

Отладку ставят на тестовый контур. На рабочем сервере её оставляют только на время разбора конкретной проблемы.

РискВ чём проявляется
⏱ ПроизводительностьПроцессы проверяют, нет ли подключённого отладчика и точек останова. При активной отладке остановленный на точке вызов держит блокировки, и другие пользователи ждут
🔓 Доступ к даннымПодключённый отладчик видит значения переменных, а в них персональные данные, суммы, пароли из настроек обменов
🧩 СтабильностьВычисление выражений в отладчике выполняет код на сервере. Неосторожное выражение изменит данные в рабочей базе

При HTTP-отладке задайте пароль сервера отладки ключом -debugServerPwd и закройте порт 1550 брандмауэром для всех, кроме машин разработчиков.

Как включить отладку на время разбора

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

  1. Откройте редактор реестра и раздел HKLM\SYSTEM\CurrentControlSet\Services\<имя службы>.
  2. В значении ImagePath допишите -debug сразу после пути к ragent.exe, до ключа -srvc. Для HTTP-отладки допишите -debug -http.
  3. Перезапустите службу агента в согласованное время.
  4. Убедитесь, что ключ появился в строке запущенного процесса, а при 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. Это одна команда из раздела про строку запуска, обёрнутая в скрипт.

Как выключить отладку

  1. Уберите -debug (и -http, если был) из строки запуска. На Windows это значение ImagePath в разделе реестра HKLM\SYSTEM\CurrentControlSet\Services\<имя службы>, на Linux — файл настроек или юнит из раздела выше.
  2. На Linux после правки юнита выполните systemctl daemon-reload.
  3. Перезапустите службу агента.
  4. Проверьте строку запущенного процесса ещё раз.

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

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

Нужно ли включать отладку для каждой базы отдельно?
Нет. Ключ -debug действует на весь кластер агента. Все базы этого кластера становятся доступны для серверной отладки.
Можно ли включить отладку без перезапуска службы?
Нет. Ключ читается только при старте агента. Без перезапуска, а значит без разрыва сеансов, режим не поменять.
Включена ли отладка в файловой базе?
У файловой базы нет сервера 1С, серверный код выполняется в клиентском процессе. Отладка работает при запуске клиента из Конфигуратора, флаг -debug здесь не нужен.
Что выбрать: TCP или HTTP?
HTTP-отладка новее, проходит через один порт и поддерживает пароль. TCP оставляют там, где так исторически настроено. Главное — один и тот же протокол на сервере и в настройках Конфигуратора.
Почему отладка видна в процессе, но не в параметрах службы?
Агент запустили вручную из командной строки или через другую службу. После перезагрузки сервера режим пропадёт.