Как включить серверную отладку в кластере 1С 8.3 и подключиться к ней
Содержание
Чтобы отладка 1С на сервере заработала, агенту сервера (ragent.exe) нужно добавить в строку запуска службы ключи -debug -http и перезапустить службу. После этого в Конфигураторе через Отладка → Подключение становятся видны серверные предметы отладки, и точки останова в серверных процедурах начинают срабатывать.
Частое заблуждение: «точки останова на сервере не работают, значит, сломан код или Конфигуратор». Нет. В клиент-серверном варианте сервер по умолчанию запускается без отладки, и Конфигуратор просто не видит серверных процессов. В файловой базе такой проблемы нет: там «сервер» живёт внутри клиентского процесса. Всё, что ниже, относится к платформе 8.3 и одинаково для любой конфигурации — БП, ЗУП, УТ или самописной.
Кто и с какими правами настраивает отладку в кластере
Серверная отладка затрагивает три уровня. На каждом нужен свой доступ.
| Уровень | Что делаем | Какие права нужны |
|---|---|---|
| 🖥️ Windows-сервер | Меняем параметры службы агента, открываем порт в брандмауэре | Локальный администратор сервера |
| 🧩 Кластер 1С | Проверяем базу и процессы в консоли администрирования | Администратор кластера (если он задан) |
| 📦 Информационная база | Открываем Конфигуратор, ставим точки останова | Пользователь базы с правом «Конфигуратор» (обычно роль полных прав) |
Без доступа администратора Windows дальше не продвинуться: ключ отладки задаётся в параметрах службы, а не в настройках базы.
Что подготовить заранее:
- 👤 Отдельного пользователя базы для отладки. Не работайте под общей учётной записью бухгалтерии. Так проще найти свои сеансы в консоли и в журнале регистрации.
- 🔑 Пароль администратора кластера. Он понадобится, чтобы смотреть сеансы и рабочие процессы в консоли. Если пароль утерян, не пересоздавайте кластер: восстановите настройки из резервной копии или обратитесь к тому, кто администрирует сервер.
- 🕒 Окно для перезапуска службы. Включение отладки требует рестарта агента, а значит — обрыва всех сеансов.
- 📋 Учётную запись службы. Посмотрите, от чьего имени запущен агент (обычно
USR1CV8). Права этой учётной записи важны для каталога техжурнала, о нём ниже.
Шаг 1. Добавляем ключ -debug в параметры службы агента
Агент сервера стартует как служба Windows. Ключи отладки дописываются в строку запуска этой службы.
Как найти строку запуска
- Откройте
services.mscи найдите службу агента. Обычно она называется вида «Агент сервера 1С:Предприятия 8.3 (x86-64)». - В свойствах службы посмотрите поле «Исполняемый файл». Там строка вида:
"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"
- Скопируйте точное имя службы с вкладки «Общие» (поле «Имя службы», не «Отображаемое имя»). Оно нужно для команд.
Номер версии в пути у вас будет свой. Порты 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.
Предметы отладки
- Откройте базу в Конфигураторе и запустите клиент кнопкой «Начать отладку» (
F5). Такой клиент автоматически подключается к отладчику. - Откройте
Отладка → Подключение. Появится окно «Предметы отладки». - В списке должны быть строки двух типов: клиент и «Сервер». Если серверной строки нет — отладка на сервере не включена или порт закрыт, см. раздел диагностики.
- Нажмите «Автоматическое подключение» и отметьте типы предметов, к которым Конфигуратор должен цепляться сам: клиент, сервер, при необходимости — фоновые задания, HTTP-сервисы, веб-сервисы.
- Поставьте точку останова (
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 — имя базы в кластере.
Отладка фоновых заданий и регламентных заданий
Регламентные задания выполняются на сервере без клиента, поэтому точка останова в их коде срабатывает только при включённом автоподключении фоновых заданий. Порядок такой:
- В окне «Предметы отладки» включите автоподключение для фоновых заданий.
- Поставьте точку останова в процедуре обработчика.
- Запустите задание вручную из списка регламентных заданий базы или дождитесь его расписания.
Для HTTP-сервисов действует то же правило: отметьте тип «HTTP-сервис» в автоподключении, иначе входящий запрос пройдёт мимо точки останова.
Шаг 3. Журнал регистрации и технологический журнал при разборе ошибок
Отладчик хорош, когда ошибку можно воспроизвести. Если она плавающая или случается ночью в регламентном задании, начинают с журналов.
Журнал регистрации
Он есть в каждой базе. Открывается двумя способами:
- в Конфигураторе —
Администрирование → Журнал регистрации; - в пользовательском режиме типовых конфигураций — из раздела
Администрирование, группа обслуживания.
Что делать с журналом при поиске серверной ошибки:
- 🔍 Поставьте отбор по уровню «Ошибка» и по нужному интервалу времени.
- 👤 Добавьте отбор по пользователю, если ошибка у конкретного человека.
- 📄 Откройте событие: в поле комментария лежит текст исключения и стек модулей, где оно произошло.
- 🎯 По стеку найдите модуль и строку — туда и ставьте точку останова.
Журнал фиксирует только то, что платформа или конфигурация решили записать. Падения рабочих процессов, долгие запросы и взаимоблокировки в нём часто не видны.
Технологический журнал
Это журнал самой платформы. Он включается файлом 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.
Почему отладка на сервере не подключается: диагностика
Чаще всего проблема в одном из звеньев: ключ, протокол, порт, права. Проверяйте по порядку.
sc qc "<имя службы>": в строке запуска должно быть -debug -http. Если ключ есть, убедитесь, что служба перезапущена после правки и на сервере работает процесс dbgs.exe.Test-NetConnection srv1c -Port 1550. Если TcpTestSucceeded равно False — откройте входящий порт 1550 в брандмауэре Windows на сервере.-debug -http теряется. Пропишите его в ImagePath новой службы.-debug -tcp, а Конфигуратор настроен на HTTP, или наоборот. Приведите обе стороны к одному протоколу.netstat -ano | findstr :1550.Ещё две причины, которые легко пропустить:
- 🧱 Несколько версий платформы на одном сервере. Ключ дописали в службу одной версии, а база обслуживается кластером другой. Сверьте номер в пути
ragent.exeс версией, которую показывает консоль администрирования. - 🌐 Обращение по IP вместо имени. Сервер отладки и клиенты обмениваются именем компьютера. Если имя не разрешается с рабочей станции, добавьте запись в DNS или в файл
hosts.
Как отлаживать на рабочем сервере и не остановить работу офиса
Лучший вариант — не отлаживать на продуктивном сервере вообще. Выгрузите копию базы в .dt, загрузите в тестовый кластер с включённым -debug и воспроизводите ошибку там. Но бывают ошибки, которые повторяются только на живых данных и живой нагрузке.
Что происходит при остановке на точке
Когда отладчик останавливает серверный вызов, рабочий процесс ждёт вас. Вместе с ним ждут и все блокировки, которые этот вызов успел взять.
- ⏸️ Если остановка случилась внутри транзакции, например при записи или проведении документа, данные остаются заблокированными.
- ⏳ Другие пользователи, которые пишут те же данные, ловят ошибки ожидания на блокировке после таймаута.
- 🔁 Долгая пауза на точке в проведении может выглядеть для бухгалтерии как «база повисла».
Поэтому на рабочем сервере:
- Ставьте точки останова до начала транзакции, а не внутри обработчиков записи и проведения.
- Используйте условные точки останова (
Отладка → Точка останова с условием), чтобы остановиться только на своём документе или своём пользователе. - Долго не стойте на точке: посмотрели значения — продолжили (
F5). - Держите включённым только нужный тип автоподключения. Автоподключение всех фоновых заданий на живой базе остановит чужие обмены и регламенты.
Безопасность кластера
Включённая отладка — это открытая дверь. Любой, у кого есть доступ к порту 1550 и право входа в Конфигуратор, может видеть значения переменных в серверном коде: суммы, персональные данные, пароли подключений к внешним системам.
- 🔒 Откройте порт 1550 в брандмауэре только для IP-адресов разработчиков, а не для всей сети.
- 👥 Право «Конфигуратор» давайте только тем, кто действительно разрабатывает. У бухгалтеров его быть не должно.
- 🧹 Закончили — уберите
-debug -httpиз строки запуска и перезапустите службу в следующее окно обслуживания. Отладка, забытая на месяцы, — обычная находка при аудитах. - 🛡️ Задайте администратора кластера, если его нет. Без него любой пользователь сети с консолью администрирования может управлять сеансами и базами.
Частые вопросы
Влияет ли включённый ключ -debug на скорость работы сервера?
Можно ли включить отладку для одной базы, а не для всего кластера?
Нужна ли отдельная лицензия для серверной отладки?
Как отлаживать код во внешней обработке на сервере?
Почему после перезагрузки сервера отладка пропала?
ImagePath службы через sc qc: что записано там, с тем служба и стартует после перезагрузки.