Почему 1С в режиме отладки не останавливается на точках останова и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Разберем детально, почему это происходит и какие шаги необходимо предпринять для восстановления полноценной отладки клиентского и серверного кода.

Шаг 1. Включение режима отладки службы сервера 1С (параметр -debug)

В клиент-серверном варианте работы платформы процедуры и функции могут выполняться на стороне сервера (в модулях объектов, менеджеров, общих серверных модулях, обработчиках проведения). По умолчанию служба сервера 1С (ragent.exe) запускается без режима отладки. В этом случае отладчик может перехватывать только клиентский код, а весь серверный контекст выполняется без остановок.

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

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

Посмотрим на пример правильной строки запуска службы в параметре ImagePath:


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

Обратим внимание, что параметр -debug можно указывать как перед каталогом данных -d, так и в самом конце строки запуска. После перезапуска службы сервер будет готов передавать контекст исполнения отладчику.

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

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

Откроем меню Отладка → Подключение.... В открывшемся окне отображается список доступных и подключенных предметов отладки (клиентские сеансы, фоновые задания, серверные вызовы, внешние соединения):

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

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

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

  1. В Конфигураторе перейдем в меню Отладка → Подключение....
  2. Нажмем кнопку Настройка автоматического подключения.
  3. Установим флажки напротив необходимых типов предметов:
    • Сервер — для отладки процедур и функций в серверном контексте;
    • Фоновые задания — для отладки длительных операций, регламентных задач и процедур, запускаемых через ФоновыеЗадания.Выполнить();
    • Клиентские и внешние соединения — для перехвата сеансов тонкого, толстого и веб-клиента;
    • HTTP-сервисы и Web-сервисы — для отладки входящих интеграционных вызовов.
  4. Нажмем ОК для сохранения настроек.

Шаг 4. Диагностика выполнения кода через Замер производительности

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

  1. В Конфигураторе включим замер производительности через меню Отладка → Замер производительности (или с помощью пиктограммы с секундомером).
  2. В запущенном клиенте 1С выполним целевое действие (например, проведем документ или нажмем кнопку обработки).
  3. Вернемся в Конфигуратор и повторно нажмем Замер производительности для его остановки.
  4. Проанализируем открывшуюся таблицу: если в списке строк нет процедур из целевого модуля, значит, выполнение прерывается раньше (например, срабатывает условие проверки заполнения или исключение) либо вызывается другой метод.

Шаг 5. Дополнительные факторы: кэш, препроцессор и брандмауэр

Если точки останова не работают после выполнения предыдущих шагов, рассмотрим другие скрытые причины:

  1. Директивы компиляции и инструкции препроцессора: проверим директивы над процедурой (&НаКлиенте, &НаСервере, &НаСервереБезКонтекста) и блоки препроцессора (#Если ТолстыйКлиентОбычноеПриложение Тогда). Если запуск выполняется в тонком клиенте, а код обернут в условие обычного приложения, этот блок не будет компилироваться и выполняться.
  2. Кэш конфигурации и динамическое обновление: после «демонического» (динамического) обновления сервер может исполнять старую версию скомпилированных модулей, из-за чего номера строк смещаются, а точки останова становятся неактивными. Для устранения проблемы достаточно перезапустить службу сервера 1С или полностью очистить локальный кэш конфигуратора и клиента.
  3. Сетевые экраны (Брандмауэр): отладка по протоколу TCP использует диапазон портов кластера 1С (по умолчанию 1560–1591). Если порт заблокирован межсетевым экраном между клиентским рабочим местом и сервером 1С, конфигуратор не сможет связаться с серверным процессом для передачи сигнала останова. Убедимся, что сетевые порты открыты для входящих и исходящих соединений.
  4. Свойства информационной базы: в консоли администрирования кластера серверов 1С откроем свойства информационной базы и проверим, установлен ли параметр Разрешить отладку.

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

← На главную