Как включить серверную отладку в кластере 1С 8.3 и подключиться к ней

· 10 мин

Содержание

Чтобы отладка 1С на сервере заработала, агенту сервера (ragent.exe) нужно добавить в строку запуска службы ключи -debug -http и перезапустить службу. После этого в Конфигураторе через Отладка → Подключение становятся видны серверные предметы отладки, и точки останова в серверных процедурах начинают срабатывать.

Частое заблуждение: «точки останова на сервере не работают, значит, сломан код или Конфигуратор». Нет. В клиент-серверном варианте сервер по умолчанию запускается без отладки, и Конфигуратор просто не видит серверных процессов. В файловой базе такой проблемы нет: там «сервер» живёт внутри клиентского процесса. Всё, что ниже, относится к платформе 8.3 и одинаково для любой конфигурации — БП, ЗУП, УТ или самописной.

Кто и с какими правами настраивает отладку в кластере

Серверная отладка затрагивает три уровня. На каждом нужен свой доступ.

УровеньЧто делаемКакие права нужны
🖥️ Windows-серверМеняем параметры службы агента, открываем порт в брандмауэреЛокальный администратор сервера
🧩 Кластер 1СПроверяем базу и процессы в консоли администрированияАдминистратор кластера (если он задан)
📦 Информационная базаОткрываем Конфигуратор, ставим точки остановаПользователь базы с правом «Конфигуратор» (обычно роль полных прав)

Без доступа администратора Windows дальше не продвинуться: ключ отладки задаётся в параметрах службы, а не в настройках базы.

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

  • 👤 Отдельного пользователя базы для отладки. Не работайте под общей учётной записью бухгалтерии. Так проще найти свои сеансы в консоли и в журнале регистрации.
  • 🔑 Пароль администратора кластера. Он понадобится, чтобы смотреть сеансы и рабочие процессы в консоли. Если пароль утерян, не пересоздавайте кластер: восстановите настройки из резервной копии или обратитесь к тому, кто администрирует сервер.
  • 🕒 Окно для перезапуска службы. Включение отладки требует рестарта агента, а значит — обрыва всех сеансов.
  • 📋 Учётную запись службы. Посмотрите, от чьего имени запущен агент (обычно USR1CV8). Права этой учётной записи важны для каталога техжурнала, о нём ниже.

Шаг 1. Добавляем ключ -debug в параметры службы агента

Агент сервера стартует как служба Windows. Ключи отладки дописываются в строку запуска этой службы.

Как найти строку запуска

  1. Откройте services.msc и найдите службу агента. Обычно она называется вида «Агент сервера 1С:Предприятия 8.3 (x86-64)».
  2. В свойствах службы посмотрите поле «Исполняемый файл». Там строка вида:
"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"
  1. Скопируйте точное имя службы с вкладки «Общие» (поле «Имя службы», не «Отображаемое имя»). Оно нужно для команд.

Номер версии в пути у вас будет свой. Порты 1540, 1541 и диапазон 1560–1591 — значения по умолчанию.

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

Через services.msc строку не изменить. Есть два рабочих способа.

Способ 1 — реестр. Откройте regedit, перейдите в раздел:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<имя службы>

В параметре ImagePath допишите -debug -http после ragent.exe":

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

Способ 2 — команда sc config из командной строки администратора. Внимание на синтаксис: после binPath= обязателен пробел, а кавычки внутри строки экранируются обратной косой чертой.

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

Имя службы в кавычках замените на своё. Проверить результат можно командой sc qc "<имя службы>".

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

После правки перезапустите службу. В диспетчере задач, кроме ragent.exe, rmngr.exe и rphost.exe, должен появиться процесс dbgs.exe — это сервер отладки по протоколу HTTP. По умолчанию он слушает порт 1550.

HTTP или TCP

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

Пишите протокол явно. Голый -debug без уточнения — источник путаницы, когда Конфигуратор ждёт один протокол, а сервер работает по другому.

На Linux принцип тот же: ключ -debug -http добавляют к параметрам запуска ragent в unit-файле systemd или в конфигурационном файле службы, в зависимости от того, как ставили сервер. После правки unit-файла выполните systemctl daemon-reload и перезапустите службу.

Шаг 2. Подключаем отладчик к серверу из Конфигуратора

Сервер готов. Теперь настраиваем сторону разработчика.

Протокол в Конфигураторе

Откройте Сервис → Параметры и найдите на вкладке запуска 1С:Предприятия настройки отладки. Протокол там должен совпадать с серверным: «HTTP». Если Конфигуратор запущен на другом компьютере, адрес сервера отладки указывается как http://<имя сервера>:1550.

Предметы отладки

  1. Откройте базу в Конфигураторе и запустите клиент кнопкой «Начать отладку» (F5). Такой клиент автоматически подключается к отладчику.
  2. Откройте Отладка → Подключение. Появится окно «Предметы отладки».
  3. В списке должны быть строки двух типов: клиент и «Сервер». Если серверной строки нет — отладка на сервере не включена или порт закрыт, см. раздел диагностики.
  4. Нажмите «Автоматическое подключение» и отметьте типы предметов, к которым Конфигуратор должен цепляться сам: клиент, сервер, при необходимости — фоновые задания, HTTP-сервисы, веб-сервисы.
  5. Поставьте точку останова (F9) в серверной процедуре, например в модуле объекта или в процедуре с директивой &НаСервере, и выполните действие в клиенте.

Если клиент запущен не из Конфигуратора, его можно подключить к отладке ключами командной строки:

"C:\Program Files\1cv8\8.3.24.1342\bin\1cv8c.exe" ENTERPRISE /S "srv1c\buh_test" /DEBUG -http -attach /DEBUGGERURL "http://srv1c:1550"

Здесь srv1c — имя сервера, buh_test — имя базы в кластере.

Отладка фоновых заданий и регламентных заданий

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

  1. В окне «Предметы отладки» включите автоподключение для фоновых заданий.
  2. Поставьте точку останова в процедуре обработчика.
  3. Запустите задание вручную из списка регламентных заданий базы или дождитесь его расписания.

Для HTTP-сервисов действует то же правило: отметьте тип «HTTP-сервис» в автоподключении, иначе входящий запрос пройдёт мимо точки останова.

Шаг 3. Журнал регистрации и технологический журнал при разборе ошибок

Отладчик хорош, когда ошибку можно воспроизвести. Если она плавающая или случается ночью в регламентном задании, начинают с журналов.

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

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

  • в Конфигураторе — Администрирование → Журнал регистрации;
  • в пользовательском режиме типовых конфигураций — из раздела Администрирование, группа обслуживания.

Что делать с журналом при поиске серверной ошибки:

  1. 🔍 Поставьте отбор по уровню «Ошибка» и по нужному интервалу времени.
  2. 👤 Добавьте отбор по пользователю, если ошибка у конкретного человека.
  3. 📄 Откройте событие: в поле комментария лежит текст исключения и стек модулей, где оно произошло.
  4. 🎯 По стеку найдите модуль и строку — туда и ставьте точку останова.

Журнал фиксирует только то, что платформа или конфигурация решили записать. Падения рабочих процессов, долгие запросы и взаимоблокировки в нём часто не видны.

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

Это журнал самой платформы. Он включается файлом 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_techlog" history="24">
    <event>
      <eq property="name" value="EXCP"/>
    </event>
    <property name="all"/>
  </log>
</config>

Здесь history="24" — хранить файлы 24 часа, EXCP — события исключений. Платформа перечитывает файл сама, рестарт службы не нужен.

Каталог для техжурнала должен быть доступен на запись учётной записи службы (USR1CV8 или той, что указана в службе). Иначе журнал молча не пишется. И не включайте сбор всех событий подряд на рабочем сервере: файлы растут на гигабайты в час. Отключается журнал удалением или переименованием logcfg.xml.

Почему отладка на сервере не подключается: диагностика

Чаще всего проблема в одном из звеньев: ключ, протокол, порт, права. Проверяйте по порядку.

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

Ещё две причины, которые легко пропустить:

  • 🧱 Несколько версий платформы на одном сервере. Ключ дописали в службу одной версии, а база обслуживается кластером другой. Сверьте номер в пути ragent.exe с версией, которую показывает консоль администрирования.
  • 🌐 Обращение по IP вместо имени. Сервер отладки и клиенты обмениваются именем компьютера. Если имя не разрешается с рабочей станции, добавьте запись в DNS или в файл hosts.

Как отлаживать на рабочем сервере и не остановить работу офиса

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

Что происходит при остановке на точке

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

  • ⏸️ Если остановка случилась внутри транзакции, например при записи или проведении документа, данные остаются заблокированными.
  • ⏳ Другие пользователи, которые пишут те же данные, ловят ошибки ожидания на блокировке после таймаута.
  • 🔁 Долгая пауза на точке в проведении может выглядеть для бухгалтерии как «база повисла».

Поэтому на рабочем сервере:

  1. Ставьте точки останова до начала транзакции, а не внутри обработчиков записи и проведения.
  2. Используйте условные точки останова (Отладка → Точка останова с условием), чтобы остановиться только на своём документе или своём пользователе.
  3. Долго не стойте на точке: посмотрели значения — продолжили (F5).
  4. Держите включённым только нужный тип автоподключения. Автоподключение всех фоновых заданий на живой базе остановит чужие обмены и регламенты.

Безопасность кластера

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

  • 🔒 Откройте порт 1550 в брандмауэре только для IP-адресов разработчиков, а не для всей сети.
  • 👥 Право «Конфигуратор» давайте только тем, кто действительно разрабатывает. У бухгалтеров его быть не должно.
  • 🧹 Закончили — уберите -debug -http из строки запуска и перезапустите службу в следующее окно обслуживания. Отладка, забытая на месяцы, — обычная находка при аудитах.
  • 🛡️ Задайте администратора кластера, если его нет. Без него любой пользователь сети с консолью администрирования может управлять сеансами и базами.
Перед отладкой на продуктивном сервере
Выполнено: 0 / 6

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

Влияет ли включённый ключ -debug на скорость работы сервера?
Пока к серверу никто не подключился, накладные расходы небольшие. Заметное замедление появляется при активной отладке: точки останова, пошаговое выполнение, остановленные вызовы.
Можно ли включить отладку для одной базы, а не для всего кластера?
Нет. Ключ задаётся агенту сервера и действует на все базы кластера. Ограничивайте доступ правом «Конфигуратор» в конкретной базе и правилами брандмауэра.
Нужна ли отдельная лицензия для серверной отладки?
Нет. Сеанс Конфигуратора и сеанс клиента, запущенного для отладки, занимают клиентские лицензии как обычные сеансы. Отдельной лицензии на отладку нет.
Как отлаживать код во внешней обработке на сервере?
Так же, как код конфигурации: откройте файл обработки в Конфигураторе через меню «Файл», поставьте точку останова и запустите обработку из клиента, подключённого к отладке. Серверные процедуры обработки остановятся на точке.
Почему после перезагрузки сервера отладка пропала?
Скорее всего, ключ добавляли к уже запущенному процессу вручную или правили не ту службу. Проверьте ImagePath службы через sc qc: что записано там, с тем служба и стартует после перезагрузки.