Отладка серверного кода 1С 8.3: ключ -debug, конфигуратор и техжурнал

· 10 мин

Содержание

Чтобы включить отладку на сервере 1С 8.3, добавьте ключ -debug в строку запуска агента сервера ragent.exe и перезапустите службу. После этого в конфигураторе откройте Отладка → Подключение и включите автоматическое подключение предметов отладки типа «Сервер». Точки останова в серверных процедурах начнут срабатывать.

Отладчик нужен, когда ошибку надо поймать в коде. Если же база тормозит или падает без понятной причины, полезнее технологический журнал (ТЖ), консоль кластера и утилита rac. Оба пути разобраны ниже: сначала сама отладка, потом диагностика без остановки работы пользователей.

Подготовка сервера 1С к отладке: права, порты, окно работ

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

Что проверить заранее:

  • 🔑 Права в ОС. Нужна учётная запись с правами локального администратора: вы будете менять параметры службы и перезапускать её.
  • 👤 Права в кластере. Если на кластере заданы администраторы, держите под рукой их логин и пароль — без них консоль и rac не пустят.
  • 🧑‍💻 Пользователь базы. Для отладки в конфигураторе нужен пользователь информационной базы с административными правами.
  • 🌐 Порты. Для HTTP-отладки сервер отладки по умолчанию слушает порт 1550. Если конфигуратор запускается на другой машине, откройте этот порт в брандмауэре сервера. Для обычной работы клиента нужны 1540 (агент), 1541 (менеджер кластера) и диапазон рабочих процессов, по умолчанию 1560:1591.
  • 📁 Папка для логов ТЖ. Создайте её на диске с запасом места и дайте права на запись пользователю, от имени которого работает служба (по умолчанию USR1CV8).
  • 🕐 Окно работ. Перезапуск агента обрывает сеансы всех пользователей всех баз этого сервера.

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

Лучше всего отлаживать на копии базы, развёрнутой на тестовом сервере. На рабочем сервере точка останова в общем модуле остановит вызов любого пользователя, который пройдёт через эту строку.

Как включить отладку на сервере 1С: ключ -debug для ragent

Режим отладки задаётся параметром запуска агента сервера. Пока ключа -debug нет, серверные предметы отладки в конфигураторе не появятся, как бы вы ни настраивали клиент.

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

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

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

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

Номер версии в пути у вас будет свой. Остальные параметры не трогайте.

💡 Перед правкой экспортируйте раздел службы в .reg-файл (правой кнопкой по разделу → «Экспортировать»). Если опечатаетесь в пути, служба не стартует, а файл вернёт всё за секунду.

Протокол отладки: HTTP или TCP

В 8.3 есть два механизма отладки:

ПротоколКлюч агентаКогда выбирать
HTTP-debug -httpОсновной вариант для современных версий. Работает через сервер отладки dbgs.exe, нужен для отладки из EDT и через брандмауэры
TCP-debug -tcp или просто -debugСтарый механизм, оставлен для совместимости

Протокол в агенте и в настройках конфигуратора должен совпадать. Если в агенте указан HTTP, а конфигуратор ждёт TCP, подключения не будет. Протокол конфигуратора задаётся в его параметрах, на вкладке «Отладка» окна Сервис → Параметры.

Linux: init-скрипт или systemd

Порядок зависит от того, как установлен сервер.

  • Старая схема с init-скриптом srv1cv83. В файле /etc/sysconfig/srv1cv83 установите SRV1CV8_DEBUG=1 и перезапустите службу.
  • systemd (платформа 8.3.21 и новее). Откройте unit-файл службы командой systemctl edit --full <имя юнита>, допишите -debug в строку ExecStart с вызовом ragent, затем выполните systemctl daemon-reload и перезапуск службы.

Имя юнита посмотрите командой systemctl list-units | grep 1cv8.

Как проверить, что отладка включилась

В Windows откройте диспетчер задач, вкладку «Подробности», и добавьте столбец «Командная строка». У процесса ragent.exe в строке должен быть -debug. При HTTP-отладке после первого подключения конфигуратора в списке процессов появится dbgs.exe.

В Linux то же самое покажет команда:

ps aux | grep ragent

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

Сервер готов, теперь нужно, чтобы конфигуратор «цеплялся» к серверным вызовам.

  1. Откройте базу в конфигураторе под администратором.
  2. В меню Отладка → Подключение откройте окно предметов отладки.
  3. Нажмите «Автоматическое подключение» и отметьте флажки «Сервер» и, если нужно, «Фоновое задание».
  4. Запустите клиент через Отладка → Начать отладку или клавишу F5.
  5. Поставьте точку останова (F9) в серверной процедуре и выполните действие в клиенте.

Если отладка подключилась, выполнение остановится на строке, а в конфигураторе станут доступны табло, стек вызовов и вычисление выражений (Shift+F9).

Фоновые задания и регламентные задания выполняются на сервере отдельными сеансами. Без флажка «Фоновое задание» точки останова в их обработчиках срабатывать не будут.

Отладка сеанса конкретного пользователя

Частая ситуация: ошибка воспроизводится только у одного бухгалтера и только с его правами. Есть два рабочих способа.

Способ 1. Клиент пользователя сам подключается к отладчику

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

/DEBUG -http -attach /DEBUGGERURL "http://srv1c:1550"

Здесь srv1c — имя машины, где запущен сервер отладки, 1550 — его порт. После входа сеанс пользователя появится в окне Отладка → Подключение у вас в конфигураторе. Подключитесь к нему, поставьте точку останова и попросите повторить действие.

Когда закончите, уберите параметры из настроек базы. Иначе при каждом запуске клиент будет пытаться подключиться к отладчику.

Способ 2. Технологический журнал с отбором по пользователю

Если сеанс нельзя останавливать на точке останова, соберите ТЖ только по этому пользователю. Отбор задаётся свойством usr:

<event>
  <eq property="name" value="EXCP"/>
  <eq property="usr" value="Иванова Мария"/>
</event>

Имя пишется так, как оно задано в списке пользователей базы. Как устроен файл настроек целиком — в следующем разделе.

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

ТЖ — это текстовые логи серверных процессов. Он не требует перезапуска агента и подходит для рабочего сервера, если ограничить набор событий.

Куда класть файл

Файл называется logcfg.xml. Положите его в каталог conf платформы, например C:\Program Files\1cv8\conf\. Сервер перечитывает настройки сам примерно раз в минуту, перезапуск не нужен.

Пример: ошибки и долгие вызовы

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
  <log location="D:\1C_TJ\errors" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <event>
      <eq property="name" value="TDEADLOCK"/>
    </event>
    <event>
      <eq property="name" value="TTIMEOUT"/>
    </event>
    <property name="all"/>
  </log>
  <log location="D:\1C_TJ\slow" history="12">
    <event>
      <eq property="name" value="CALL"/>
      <ge property="duration" value="5000000"/>
    </event>
    <property name="all"/>
  </log>
</config>

Что здесь происходит:

  • 📂 location — папка для логов. Внутри появятся подпапки по процессам, например rphost_4512.
  • ⏳ history — сколько часов хранить файлы. Старые удаляются автоматически.
  • 🎯 Первый журнал собирает исключения, взаимоблокировки и таймауты на блокировках.
  • 🐢 Второй журнал собирает серверные вызовы дольше 5 секунд. В актуальных версиях 8.3 длительность в ТЖ пишется в микросекундах, поэтому 5 секунд — это 5000000.

Какие события включать

СобытиеЧто показываетНагрузка на диск
EXCPИсключения: ошибки, которые видят пользователиНизкая
TDEADLOCK, TTIMEOUTВзаимоблокировки и таймауты управляемых блокировокНизкая
CALLСерверные вызовы с длительностью и памятьюСредняя, нужен отбор по длительности
TLOCKКаждая управляемая блокировкаВысокая
DBMSSQL, DBPOSTGRSЗапросы к СУБДОчень высокая

Не включайте DBMSSQL или TLOCK без отбора на рабочем сервере. За час они могут занять десятки гигабайт и замедлить работу. Включайте их на 10–15 минут, пока воспроизводите проблему, затем удаляйте блок из файла.

Чтобы отключить ТЖ, удалите logcfg.xml или уберите из него блоки <log>. Файлы в папке логов не удалятся сами до истечения history, их можно стереть вручную.

Сеансы и процессы под нагрузкой: консоль кластера и rac

Отладчик показывает код, а консоль кластера — картину сервера целиком: кто держит процессор, память и блокировки прямо сейчас.

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

Откройте «Администрирование серверов 1С Предприятия» и разверните кластер. Полезные места:

  • 🖥️ Рабочие процессы. Смотрите память каждого rphost и доступную производительность. Процесс, который распух по памяти, — первый кандидат на поиск утечки.
  • 👥 Сеансы. Добавьте через настройку списка столбцы с текущим временем вызова, временем вызова СУБД и захватом СУБД. Сеанс с большим текущим временем вызова прямо сейчас выполняет тяжёлую операцию.
  • 🔒 Блокировки. Показывает, какой сеанс держит блокировку и кто его ждёт.

Если консоль не открывается после обновления платформы, перерегистрируйте библиотеку оснастки от имени администратора:

regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"

Утилиты ras и rac

ras — сервер администрирования, rac — консольный клиент к нему. Они удобны в Linux, на серверах без графики и для скриптов.

Запуск ras как службы Windows:

sc create "1C:Enterprise 8.3 Remote Server" binPath= "\"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe\" cluster --service --port=1545 localhost:1540" start= auto

Основные команды rac:

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

Первая команда даёт идентификатор кластера, вторая — рабочие процессы с памятью, третья — сеансы. Если в кластере заданы администраторы, добавьте --cluster-user и --cluster-pwd. Полный список параметров покажет rac help.

rac не включает и не выключает режим -debug: это параметр агента, и для его смены нужен перезапуск службы.

Команда rac session terminate и завершение рабочего процесса в консоли обрывают работу пользователя без сохранения. Перед этим свяжитесь с ним, а процесс rphost завершайте только вне рабочего времени.

Как читать логи ТЖ и находить причину ошибки

Файлы ТЖ называются по дате и часу: 26100714.log — это 7 октября 2026 года, 14 часов. Каждое событие — одна или несколько строк.

Пример записи:

35:12.345007-0,EXCP,1,process=rphost,p:processName=buh,Usr=Иванова Мария,Descr='Деление на 0'

Как её разобрать:

  1. 35:12.345007 — минуты, секунды и микросекунды внутри часа из имени файла.
  2. -0 — длительность события.
  3. EXCP — тип события.
  4. p:processName — имя информационной базы.
  5. Usr — пользователь.
  6. Descr — текст ошибки, а при property name="all" рядом будет и контекст: модуль и строка.

Быстрый поиск по всем подпапкам в Windows:

Get-ChildItem D:\1C_TJ\errors -Recurse -Filter *.log | Select-String "Деление на 0"

В Linux:

grep -r "Деление на 0" /var/log/1c_tj/errors

Порядок разбора медленной операции:

  1. Найдите в журнале slow событие CALL нужного пользователя по времени жалобы.
  2. Посмотрите свойство Context — там модуль и процедура.
  3. Если рядом есть TTIMEOUT или TDEADLOCK, проблема в блокировках, а не в коде.
  4. Если блокировок нет, а вызов долгий, включите на 10 минут DBMSSQL с отбором по пользователю и найдите самый долгий запрос.

💡 ТЖ пишет в кодировке UTF-8. Если в Блокноте видите кракозябры, откройте файл в редакторе, который умеет выбирать кодировку.

Частые ошибки при включении отладки

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

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

Замедляет ли ключ -debug работу сервера?
Сам ключ почти не нагружает сервер. Работу замедляют остановки на точках останова и подробный техжурнал. После отладки ключ лучше убрать.
Можно ли включить отладку без перезапуска службы?
Нет. Ключ -debug читается при старте агента. Без перезапуска можно включить только технологический журнал.
Нужно ли убирать -debug после работы?
На рабочем сервере — да. Иначе любой администратор базы с конфигуратором сможет остановить серверный вызов пользователей точкой останова.
Как отладить регламентное задание?
Включите в автоматическом подключении флажок «Фоновое задание», поставьте точку останова в обработчике и дождитесь запуска по расписанию или запустите задание вручную.
Почему в ТЖ нет имени пользователя у части событий?
Системные события процессов не привязаны к сеансу. Свойство Usr заполняется только у событий, выполненных в контексте пользовательского сеанса.