Каждый разработчик 1С рано или поздно сталкивается с ситуацией, когда отладчик начинает «капризничать»: точки останова (breakpoints) установлены, код гарантированно выполняется, но система упорно их игнорирует. Особенно часто это проявляется при работе с серверными модулями, процедурами обмена данными (например, МенеджерОбменаЧерезУниверсальныйФормат) или фоновыми заданиями. В этой статье мы подробно разберем, почему это происходит и как восстановить работоспособность инструментов отладки.
Первым делом нам необходимо выяснить, где именно не срабатывает отладка. Разберем ситуацию: если точка останова в процедуре ПриНачалеРаботыСистемы (клиентский модуль) работает, а в модуле объекта документа или справочника (серверный код) — нет, значит, проблема локализована на стороне сервера 1С. Проанализируем, запущен ли сервер в режиме отладки.
По умолчанию сервер 1С:Предприятие запускается без возможности отладки для экономии ресурсов. Чтобы включить ее, выполним следующие действия:
regedit).HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (название может отличаться в зависимости от версии платформы).ImagePath.-debug.Пример исправленной строки запуска службы:
"C:\Program Files\1cv8\8.3.21.1622\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
После внесения изменений обязательно перезапустим службу 1C:Enterprise 8.3 Server Agent. Помните, что без этого флага серверные модули отлаживаться не будут. В случаях, когда включить отладку на сервере не удается, можно использовать расширение для анализа данных и отладки СКД под пользователем.
Традиционная отладка в 1С работает по протоколу TCP. Она часто страдает от блокировок брандмауэрами, антивирусами или нестабильности сетевых соединений. Рассмотрим более современный и надежный способ — HTTP-отладку. Этот метод использует специальный сервис dbgs, который работает гораздо стабильнее в сложных сетевых инфраструктурах.
Для перехода на HTTP-отладку выполним настройку в Конфигураторе:
Если используется публикация на веб-сервере (например, Apache или IIS), необходимо убедиться, что в файле default.vrd разрешена отладка. Проанализируем структуру этого файла и найдем нужную секцию:
<debug enable="true" url="http://server_name/debug_service" />
Часто проблема «неработающей» отладки связана с тем, что код выполняется в фоновом задании. Модули обмена данными (например, ОбменДаннымиXDTOСервер) часто запускаются системой не в текущем сеансе, а в отдельном фоновом процессе. По умолчанию Конфигуратор не «подцепляет» такие задания.
Разберем, как включить автоматическое подключение:
После этого, как только система запустит фоновый процесс обмена, отладчик автоматически обнаружит его и остановится на вашей точке останова.
Иногда причиной странного поведения системы становится «замусоренный» кэш. Система может пытаться сопоставить текущий исходный код с закэшированной старой версией скомпилированного модуля, из-за чего адреса строк не совпадают и точка останова проскакивает. Проанализируем ситуацию: если вы только что изменили код, а отладчик все равно не останавливается, пора чистить кэш.
Рекомендуется выполнить очистку как на стороне клиента, так и на стороне сервера:
%AppData%\1C\1cv8\.snaccfg, расположенной в каталоге данных сервера (внутри папки с идентификатором информационной базы).Если мы используем стандартную TCP-отладку, важно помнить, что для взаимодействия Конфигуратора и сервера используется диапазон портов (обычно 1560–1591). Проанализируем настройки брандмауэра Windows:
dbgs (сервера отладки), по умолчанию используется порт 1562. Убедимся, что он доступен.Выясним еще одну неочевидную причину: если вы пытаетесь отладить код в модуле, который закрыт паролем, точки останова работать не будут. Для активации отладки в таких модулях необходимо сначала открыть текст модуля, введя пароль в текущем сеансе Конфигуратора. Только после этого механизм отладки «увидит» внутреннюю структуру процедур и функций.
Подводя итог, можно сказать, что в 90% случаев проблему решает либо добавление флага -debug в реестр сервера, либо включение автоматического подключения фоновых заданий в меню отладки. Если же эти методы не помогают, переход на HTTP-отладку является самым надежным способом забыть о подобных проблемах навсегда.