Отладка серверного кода 1С 8.3: ключ -debug, конфигуратор и техжурнал
Содержание
Чтобы включить отладку на сервере 1С 8.3, добавьте ключ -debug в строку запуска агента сервера ragent.exe и перезапустите службу. После этого в конфигураторе откройте Отладка → Подключение и включите автоматическое подключение предметов отладки типа «Сервер». Точки останова в серверных процедурах начнут срабатывать.
Отладчик нужен, когда ошибку надо поймать в коде. Если же база тормозит или падает без понятной причины, полезнее технологический журнал (ТЖ), консоль кластера и утилита rac. Оба пути разобраны ниже: сначала сама отладка, потом диагностика без остановки работы пользователей.
Подготовка сервера 1С к отладке: права, порты, окно работ
Включение отладки на сервере требует перезапуска агента. Поэтому сначала подготовьте всё, что понадобится, чтобы не перезапускать службу дважды.
Что проверить заранее:
- 🔑 Права в ОС. Нужна учётная запись с правами локального администратора: вы будете менять параметры службы и перезапускать её.
- 👤 Права в кластере. Если на кластере заданы администраторы, держите под рукой их логин и пароль — без них консоль и
racне пустят. - 🧑💻 Пользователь базы. Для отладки в конфигураторе нужен пользователь информационной базы с административными правами.
- 🌐 Порты. Для HTTP-отладки сервер отладки по умолчанию слушает порт
1550. Если конфигуратор запускается на другой машине, откройте этот порт в брандмауэре сервера. Для обычной работы клиента нужны1540(агент),1541(менеджер кластера) и диапазон рабочих процессов, по умолчанию1560:1591. - 📁 Папка для логов ТЖ. Создайте её на диске с запасом места и дайте права на запись пользователю, от имени которого работает служба (по умолчанию
USR1CV8). - 🕐 Окно работ. Перезапуск агента обрывает сеансы всех пользователей всех баз этого сервера.
Перезапускайте службу сервера 1С только в нерабочее время или после предупреждения пользователей. Несохранённые документы будут потеряны, фоновые задания прервутся.
Лучше всего отлаживать на копии базы, развёрнутой на тестовом сервере. На рабочем сервере точка останова в общем модуле остановит вызов любого пользователя, который пройдёт через эту строку.
Как включить отладку на сервере 1С: ключ -debug для ragent
Режим отладки задаётся параметром запуска агента сервера. Пока ключа -debug нет, серверные предметы отладки в конфигураторе не появятся, как бы вы ни настраивали клиент.
Windows: правка параметров службы
- Откройте редактор реестра
regedit. - Перейдите в ветку
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. - Найдите раздел службы агента. Для 64-разрядного сервера он называется
1C:Enterprise 8.3 Server Agent (x86-64). - Откройте параметр
ImagePathи добавьте в строку ключ-debugсразу после пути кragent.exe. - Перезапустите службу в оснастке
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
Подключение конфигуратора к серверной отладке
Сервер готов, теперь нужно, чтобы конфигуратор «цеплялся» к серверным вызовам.
- Откройте базу в конфигураторе под администратором.
- В меню
Отладка → Подключениеоткройте окно предметов отладки. - Нажмите «Автоматическое подключение» и отметьте флажки «Сервер» и, если нужно, «Фоновое задание».
- Запустите клиент через
Отладка → Начать отладкуили клавишуF5. - Поставьте точку останова (
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'
Как её разобрать:
35:12.345007— минуты, секунды и микросекунды внутри часа из имени файла.-0— длительность события.EXCP— тип события.p:processName— имя информационной базы.Usr— пользователь.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
Порядок разбора медленной операции:
- Найдите в журнале
slowсобытиеCALLнужного пользователя по времени жалобы. - Посмотрите свойство
Context— там модуль и процедура. - Если рядом есть
TTIMEOUTилиTDEADLOCK, проблема в блокировках, а не в коде. - Если блокировок нет, а вызов долгий, включите на 10 минут
DBMSSQLс отбором по пользователю и найдите самый долгий запрос.
💡 ТЖ пишет в кодировке UTF-8. Если в Блокноте видите кракозябры, откройте файл в редакторе, который умеет выбирать кодировку.