Прописываем debug в службу агента сервера 1С и проверяем, что отладка работает

· 9 мин

Содержание

Чтобы включить отладку на сервере 1С 8.3, допишите ключ -debug в строку запуска службы агента сервера (ragent.exe) и перезапустите службу. В Windows эта строка хранится в параметре ImagePath раздела службы в реестре, в Linux — в unit-файле systemd. Галочки «включить отладку» в консоли администрирования нет, и искать её там бесполезно.

Частое заблуждение — что отладку «прописывают» в каждой базе или в настройках кластера. Нет: ключ действует на весь сервер, на все его рабочие процессы и все базы кластера. Поэтому включают его осознанно, на время, и лучше в нерабочие часы.

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

Сервер 1С:Предприятия — это три типа процессов. Порядок у них жёсткий, от него зависит, куда прописывать debug.

  • 🧩 ragent — агент сервера. Слушает порт 1540, запускается как служба и порождает остальные процессы.
  • 🗂 rmngr — менеджер кластера, по умолчанию порт 1541. Хранит реестр кластера в каталоге srvinfo\reg_1541.
  • ⚙️ rphost — рабочие процессы. В них выполняется серверный код конфигурации. Их порты берутся из диапазона, заданного в свойствах рабочего сервера (по умолчанию 1560–1591).

Ключ -debug передаётся агенту. Агент запускает менеджер и рабочие процессы уже в режиме отладки. Отдельно прописывать что-то для rphost не нужно.

Отладку часто путают с логированием. Это три разных механизма:

МеханизмЧто даётГде включается
Режим отладки (-debug)Точки останова и пошаговое выполнение серверного кодаСтрока запуска ragent
Технологический журналПодробные события платформы: исключения, блокировки, долгие вызовыФайл logcfg.xml
Журнал регистрацииДействия пользователей и прикладные события базыКонфигуратор или клиент, для каждой базы

💡 В инструкциях иногда встречается «журнал dbgras». Такого файла у платформы нет. Есть dbgs — сервер отладки для протокола HTTP — и ras — сервер администрирования. Журнал отладки ни тот, ни другой не пишет.

Перед тем как включать отладку на сервере 1С

Пять пунктов, которые лучше сверить до правки реестра:

  1. Узнайте точное имя службы агента. В services.msc она обычно называется «Агент сервера 1С:Предприятия 8.3 (x86-64)», а внутреннее имя похоже на 1C:Enterprise 8.3 Server Agent (x86-64). Если на сервере стоит несколько версий платформы, служб тоже несколько.
  2. Выберите время. Перезапуск службы агента обрывает все сеансы пользователей на этом сервере — несохранённые документы пропадут. Предупредите людей или дождитесь вечера.
  3. Определите протокол. По умолчанию отладка идёт по TCP/IP. Протокол HTTP нужен, если отлаживаете через межсетевой экран или хотите отлаживать фоновые задания и сеансы, запущенные не вами.
  4. Проверьте порты. Для TCP отладчик ходит к рабочим процессам по их диапазону, для HTTP — к серверу отладки, по умолчанию на порт 1550.
  5. Сохраните исходную строку ImagePath в текстовый файл. Если что-то пойдёт не так, вернёте её за минуту.

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

Прописываем ключ -debug в службу Windows

Способ 1. Через редактор реестра

  1. Запустите regedit от имени администратора.
  2. Откройте раздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services.
  3. Найдите подраздел службы агента — например, 1C:Enterprise 8.3 Server Agent (x86-64).
  4. Откройте параметр ImagePath.
  5. Допишите -debug после -agent или в конец строки, через пробел.
  6. Перезапустите службу в services.msc.

Строка до правки выглядит примерно так:

"C:\Program Files\1cv8\8.3.24.1342\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.1342\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"

Номер платформы, порты и каталог у вас свои. Меняйте только добавлением ключа, остальное не трогайте.

Для отладки по HTTP пишут -debug -http. Явное -debug -tcp равносильно просто -debug.

Способ 2. Командой sc config

Тот же результат без реестра. Командная строка — от администратора:

sc qc "1C:Enterprise 8.3 Server Agent (x86-64)"
sc config "1C:Enterprise 8.3 Server Agent (x86-64)" binPath= "\"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe\" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug -d \"C:\Program Files\1cv8\srvinfo\""
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"

Первая команда показывает текущую строку — скопируйте её и добавьте ключ. После binPath= обязателен пробел, а кавычки внутри пути экранируются обратной косой чертой.

Способ 3. Ручной запуск для проверки

Если служба не нужна, агент можно запустить в консоли — удобно на тестовом стенде:

"C:\Program Files\1cv8\8.3.24.1342\bin\ragent.exe" -agent -port 1540 -regport 1541 -range 1560:1591 -debug -d "C:\Program Files\1cv8\srvinfo"

Перед этим остановите службу с тем же каталогом srvinfo и портами. Два агента на одних портах не уживутся. Закрыли окно консоли — сервер остановлен.

💡 После обновления платформы установщик пересоздаёт службу, и -debug пропадает. Это нормальная причина, почему «вчера отладка работала, а сегодня нет».

Что умеют консоль администрирования и rac

В консоли администрирования серверов 1С отладку не включают — ни в свойствах кластера, ни в свойствах рабочего сервера такой настройки нет. Зато консоль нужна, чтобы проверить результат:

  • 🔍 в узле «Рабочие процессы» должны появиться заново запущенные rphost с новым временем старта;
  • 🔍 в свойствах рабочего сервера видно диапазон портов — он нужен для правил межсетевого экрана;
  • 🔍 в «Сеансах» видно, кто ещё работает, перед тем как перезапускать службу.

Если удобнее командная строка, то же самое показывает утилита rac через сервер администрирования ras. Сначала запускают ras, затем:

ras cluster --port=1545 localhost:1540
rac localhost:1545 cluster list
rac localhost:1545 process list --cluster=<id_кластера>

Идентификатор кластера берите из вывода cluster list. Ключа, который включал бы отладку, у rac нет: она управляет кластером, а не строкой запуска агента. Полный список команд — rac help.

Отладка на сервере 1С под Linux

На Linux ключ тот же, меняется только место, где его прописывают.

Старые установки со скриптом /etc/init.d/srv1cv83. Параметры читаются из файла /etc/sysconfig/srv1cv83 (RHEL-подобные системы) или /etc/default/srv1cv83 (Debian, Ubuntu). В нём есть строка SRV1CV8_DEBUG. Поставьте SRV1CV8_DEBUG=1 и перезапустите службу:

sudo systemctl restart srv1cv83

Современные платформы с unit-файлом systemd. Службы называются по номеру версии, например srv1cv8-8.3.24.1342@default. Ключ добавляют через переопределение, не трогая файл из пакета:

systemctl cat srv1cv8-8.3.24.1342@default
sudo systemctl edit srv1cv8-8.3.24.1342@default

В открывшемся редакторе сначала пишут пустую строку ExecStart=, затем полную строку ExecStart= из вывода systemctl cat с добавленным -debug. Пустая строка сбрасывает исходную команду — без неё systemd ругнётся на два ExecStart. Затем:

sudo systemctl daemon-reload
sudo systemctl restart srv1cv8-8.3.24.1342@default
ps aux | grep ragent

В выводе ps у процесса ragent должен стоять ключ -debug. Если его нет — служба читает другой файл.

Подключаем конфигуратор к серверной отладке

Сервер готов, теперь к нему нужно подключить отладчик.

  1. В конфигураторе откройте Сервис → Параметры → Отладка и выберите тот же протокол, что на сервере: TCP/IP или HTTP.
  2. Запустите базу из конфигуратора клавишей F5 — отладка сеанса подключится сама.
  3. Для серверных вызовов, фоновых и регламентных заданий откройте Отладка → Подключение. В окне «Предметы отладки» нажмите «Автоматическое подключение» и отметьте нужные типы: серверный контекст, фоновое задание и т.д.
  4. Поставьте точку останова в серверной процедуре (F9) и выполните действие в базе.

Если пользователь запускает базу сам, не из конфигуратора, разрешение отладки задают параметром запуска /DEBUG в свойствах базы, в поле дополнительных параметров. Для HTTP к нему добавляют адрес сервера отладки:

/DEBUG -http -attach /DEBUGGERURL "http://srv-1c:1550"

💡 Отлаживать по HTTP удобнее в команде: несколько разработчиков подключаются к одному серверу отладки, и для этого достаточно открыть один порт, а не весь диапазон рабочих процессов.

Логирование: технологический журнал и журнал регистрации

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

Технологический журнал через logcfg.xml

Файл logcfg.xml кладут в каталог conf платформы, например C:\Program Files\1cv8\conf\ (для версии — в bin\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>

Журнал пишется в подкаталоги по именам процессов (rphost_1234), файлы — по часам, формата ГГММДДЧЧ.log. Ищут в них обычно поиском по ключевому слову события (EXCP, TLOCK, TTIMEOUT) и по имени базы.

Ротация и очистка логов

ЧтоКак ограничитьЧем рискуете без ограничения
Технологический журналАтрибут history у <log>, в часах. Старые файлы платформа удаляет самаЗаполненный диск за сутки при событиях <property name="all"/> без фильтра
Журнал регистрацииВ конфигураторе Администрирование → Настройка журнала регистрации: уровень и кнопка сокращения журналаРост каталога 1Cv8Log базы на гигабайты
Дампы процессовЭлемент <dump> в logcfg.xml, отдельный каталогДампы рабочих процессов по сотне мегабайт каждый

Пишите технологический журнал на отдельный диск, не на системный. Полный диск C: роняет и сервер 1С, и СУБД, если она на той же машине.

Когда диагностика закончена, удалите или переименуйте logcfg.xml и уберите -debug из строки запуска службы. Второе снова потребует перезапуска — снова с предупреждением пользователей.

Почему отладка на сервере не работает: разбор ошибок

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

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

Нужен ли монопольный доступ к базе, чтобы включить отладку на сервере?
Нет. Монопольный доступ к базе не нужен, нужен перезапуск службы агента — а он отключает всех пользователей сервера.
Можно ли включить отладку только для одной базы кластера?
Нет. Ключ -debug действует на весь сервер. Ограничить можно только то, к чему подключается отладчик: конкретная база и предметы отладки выбираются в конфигураторе.
Сильно ли режим отладки замедляет сервер?
Без подключённого отладчика накладные расходы небольшие, но они есть. С подключённым отладчиком и точками останова серверный вызов ждёт разработчика — пользователи увидят «зависание». Поэтому на боевом сервере режим включают на время.
Чем отладка по HTTP лучше, чем по TCP?
HTTP работает через сервер отладки dbgs и один порт, его проще пропустить через межсетевой экран. Он позволяет подключаться нескольким разработчикам и отлаживать мобильные и веб-клиенты. TCP проще: ничего, кроме ключа -debug, не нужно.
Где посмотреть, включена ли уже отладка на сервере?
В строке запуска процесса ragent. В Windows — столбец «Командная строка» в диспетчере задач или команда sc qc для службы, в Linux — ps aux | grep ragent. Если ключа -debug нет, режим выключен.