К статье
Практический материал

Администрирование · 13 мин

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

Почему не работает отладка на сервере 1С: настройка debug в srv1cv8, ключ -debug, фаервол, отладка HTTP-сервисов и фоновых заданий. Пошаговая инструкция.

Отладка на сервере 1С перестаёт работать чаще всего из-за того, что агент сервера запущен без ключа -debug. Это самая распространённая причина: конфигуратор подключается к базе, точки останова расставлены, но выполнение не останавливается, потому что сервер просто не собирает отладочную информацию. Вторая по частоте причина — отладка включена, но по другому протоколу, чем ожидает конфигуратор (TCP вместо HTTP или наоборот).

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

Ниже разобраны все типовые причины: от ключей запуска службы агента до блокировки портов фаерволом и особенностей отладки HTTP-сервисов. Материал применим к платформе 8.3 в клиент-серверном варианте работы с СУБД (MS SQL, PostgreSQL и другими).

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

В клиент-серверном режиме исполнение кода на сервере контролирует рабочий процесс rphost. Чтобы он мог взаимодействовать с конфигуратором, агент сервера (ragent) должен быть запущен в отладочном режиме. Без ключа -debug сервер работает в штатном режиме и игнорирует все запросы на отладку — при этом никаких ошибок пользователь не видит, точки останова просто не срабатывают.

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

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

Включение ключа -debug на службе агента сервера

Основное действие — перезапуск службы агента сервера с ключом -debug. На Windows параметры запуска службы хранятся в реестре: ветка HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services, подраздел агента сервера 1С (имя содержит версию платформы, например «1C:Enterprise 8.3 Server Agent»). В параметре ImagePath в строку запуска добавляется -debug после остальных ключей.

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

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

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

Порядок включения отладки на сервере
  1. 1
    Откройте реестр и найдите службу агента сервера 1С в ветке Services
  2. 2
    В параметре ImagePath добавьте ключ -debug в строку запуска
  3. 3
    Перезапустите службу агента сервера (net stop / net start или оснастка services.msc)
  4. 4
    В конфигураторе откройте Отладка → Подключение и включите автоматическое подключение нужных предметов отладки
  5. 5
    Поставьте точку останова в серверной процедуре и выполните действие в клиенте
  6. 6
    Убедитесь, что выполнение остановилось, затем после завершения работ уберите ключ -debug и снова перезапустите службу

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

Даже при правильно запущенном сервере отладка не сработает, если конфигуратор не подключается к нужным предметам отладки. Откройте «Отладка» → «Подключение» → кнопка «Автоматическое подключение» и отметьте типы, которые должны отлаживаться: «Сервер», «Фоновое задание», «HTTP-сервис» и другие по ситуации.

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

Для фоновых заданий есть дополнительная тонкость: задание стартует в отдельном сеансе, и подключиться к нему нужно успеть до выполнения целевого кода. Надёжный приём — поставить в начале фонового метода точку останова и включить автоподключение фоновых заданий, тогда конфигуратор подхватит задание сразу при старте.

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

Платформа поддерживает два механизма отладки. Классический — прямое TCP-соединение между конфигуратором и рабочими процессами сервера. Он требует сетевой доступности диапазона портов рабочих процессов (по умолчанию 1560–1591) и порта агента 1540–1541. Если между машиной разработчика и сервером есть фаервол или NAT, TCP-отладка часто не работает именно из-за закрытых портов.

Отладка по HTTP работает через сервер отладки dbgs, который публикуется на веб-сервере (IIS или Apache) аналогично публикации информационной базы. Конфигуратор и сервер 1С обращаются к dbgs по HTTP/HTTPS, поэтому достаточно открытого порта веб-сервера. Этот вариант выбирают, когда конфигуратор и сервер находятся в разных сетях или порты рабочих процессов закрыты политиками безопасности.

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

Выбор протокола отладки

Отладка по TCP

Проще в настройке, работает из коробки. Требует открытых портов 1540-1541 и 1560-1591 между конфигуратором и сервером. Подходит для локальной сети.

Отладка по HTTP через dbgs

Требует публикации сервера отладки на IIS или Apache. Работает через стандартный веб-порт, подходит для разнесённых сетей и строгих фаерволов. Настройка сложнее.

Сеть, фаервол и права доступа

Если сервер и конфигуратор на разных машинах, проверьте доступность портов. Для TCP-отладки критичны порты агента (1540, 1541) и диапазон портов рабочих процессов (по умолчанию 1560–1591). Проверить доступность можно командой Test-NetConnection server -Port 1560 в PowerShell с машины разработчика.

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

Ещё одна причина — антивирус или системы защиты, которые блокируют межпроцессное взаимодействие или сетевые подключения rphost. Если порты открыты, служба запущена с ключом, но отладка молчит, временно проверьте гипотезу, добавив процессы платформы в исключения защитного ПО.

Контрольные точки

Как проверить результат

Служба агента запущена с ключом -debug
Норма

В строке запуска службы в реестре или в диспетчере задач виден параметр -debug

Тревожный признак

Ключ отсутствует — сервер игнорирует запросы на отладку

Серверный предмет отладки в конфигураторе
Норма

В окне подключения виден предмет «Сервер» и он подключён

Тревожный признак

Список пуст или серверный предмет не подключается

Доступность портов
Норма

Test-NetConnection по портам 1540-1591 возвращает TcpTestSucceeded: True

Тревожный признак

Соединение не устанавливается — проверяйте фаервол

Срабатывание точки останова
Норма

Выполнение останавливается в серверной процедуре

Тревожный признак

Точка останова отображается с признаком недоступности или игнорируется

Особые сценарии: HTTP-сервисы, веб-клиент и расширения

Отладка HTTP-сервисов

Код HTTP-сервисов выполняется на сервере в сеансах, которые создаются при каждом обращении к опубликованному сервису. Чтобы отладить обработчик, включите автоподключение предмета отладки «HTTP-сервис» и отправьте запрос к сервису. Если точка не срабатывает, проверьте, что обращение идёт к той же базе, что открыта в конфигураторе, — при нескольких публикациях легко попасть не в ту базу.

Веб-клиент и тонкий клиент через веб-сервер

При работе через веб-сервер клиентский код отлаживается отдельно от серверного. Для веб-клиента в настройках подключения должен быть включён соответствующий тип предмета отладки, а сам клиент запущен с признаком отладки (параметр в строке запуска или включённая настройка в диалоге подключения).

Код в расширениях конфигурации

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

Типичные ошибки
01
Добавили -debug, но не перезапустили службу — параметры применяются только при старте процесса
02
Оставили отладку включённой на продуктивном сервере — падает производительность всех сеансов
03
Включили автоподключение только к клиенту, а код выполняется на сервере или в фоновом задании
04
Отлаживают HTTP-сервис, но запрос уходит в другую опубликованную базу
05
Правили реестр не в той ветке службы — на сервере установлено несколько версий платформы

Когда отладка не нужна: альтернативные способы диагностики

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

Для разовой диагностики удобен замер производительности в конфигураторе и вывод отладочных сообщений через Сообщить() или запись в журнал регистрации. На продуктивном сервере, где перезапуск службы невозможен, это единственный безопасный способ получить информацию о выполнении серверного кода.

Маршрут решения

Как выбрать действие

Точки останова на сервере игнорируются во всех базахПроверьте ключ -debug в параметрах службы агента и перезапустите её
Отладка работает в одной базе, но не в другойПроверьте настройки автоподключения предметов отладки для конкретной базы
Конфигуратор и сервер в разных сетях, порты закрытыНастройте отладку по HTTP через сервер отладки dbgs
Не останавливается только фоновое заданиеВключите автоподключение фоновых заданий и перезапустите задание
Продуктивный сервер, перезапуск невозможенИспользуйте технологический журнал и журнал регистрации вместо отладки

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

Итог

Что важно запомнить

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

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

Точка останова отображается с восклицательным знаком и не срабатывает. Что это значит?

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

Можно ли включить отладку без перезапуска службы агента?

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

Отладка работает на тестовом сервере, но не на продуктивном. Почему?

Сравните параметры запуска службы на обоих серверах: чаще всего на продуктиве ключ -debug не добавлен или был убран после предыдущих работ. Также проверьте различия в фаерволе, версиях платформы и настройках кластера — на продуктиве может быть несколько рабочих серверов, и сеанс попадает не на тот, где включена отладка.

Как отладить код, который выполняет регламентное задание по расписанию?

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

Влияет ли включённая отладка на пользователей сервера?

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

Почему в списке предметов отладки пусто, хотя сервер запущен с ключом -debug?

Обычно это проблема прав или сети. Если в кластере настроены администраторы, конфигуратор должен подключаться под учётной записью с правами администратора кластера. Также проверьте, что порты агента и рабочих процессов доступны с машины разработчика, и что в настройках конфигуратора выбран тот же протокол отладки, который поддерживает сервер.