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

Разработка и Конфигурация · 11 мин

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

Как работает отладчик 1С: запуск предмета отладки, точки останова, пошаговое выполнение, табло выражений и типичные ошибки при поиске дефектов в коде.

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

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

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

Как устроен механизм отладки в платформе 1С

Отладка в 1С построена по схеме «конфигуратор — отладочный сервер — исполняющий модуль». Конфигуратор выступает управляющей стороной: он отправляет команды (остановиться, продолжить, сделать шаг) и получает данные о текущем состоянии — стек вызовов, значения переменных, текущую строку кода.

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

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

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

Для файловой информационной базы достаточно открыть конфигуратор и запустить отладку командой «Отладка — Начать отладку» или клавишей F5. Платформа запустит клиентское приложение в отладочном режиме, и все точки останова начнут срабатывать автоматически.

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

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

Порядок запуска отладки
  1. 1
    Откройте конфигуратор нужной информационной базы
  2. 2
    Для клиент-серверной базы убедитесь, что на сервере разрешена отладка
  3. 3
    Установите точки останова в нужных строках модуля
  4. 4
    Нажмите F5 или подключитесь к уже запущенному сеансу
  5. 5
    Воспроизведите действие пользователя, вызывающее отлаживаемый код
  6. 6
    Проверьте, что выполнение остановилось на точке останова

Точки останова: виды и управление остановкой

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

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

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

Пошаговое выполнение и навигация по коду

Когда выполнение остановлено, доступны команды пошагового движения. «Шагнуть через» (F10) выполняет текущую строку целиком, не заходя внутрь вызываемых процедур. «Шагнуть в» (F11) переходит внутрь вызова — так можно проследить логику вложенных функций. «Шагнуть из» (Shift+F11) доводит текущую процедуру до конца и останавливается в вызвавшем её коде.

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

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

Просмотр значений: табло, выражения и вычисление

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

Окно «Вычислить выражение» (Shift+F9) выполняет произвольный код в текущем контексте остановленного выполнения. Это позволяет не только смотреть, но и менять значения переменных на лету — например, подставить другое значение и продолжить выполнение, чтобы проверить гипотезу без перезапуска.

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

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

Отладка серверного кода, фоновых заданий и веб-сервисов

Серверные процедуры отлаживаются так же, как клиентские, но требуют подключённого предмета отладки «Сервер». При клиент-серверном вызове отладчик автоматически переключает контекст: сработавшая точка в серверной процедуре покажет серверный стек и серверные переменные.

Фоновые задания и регламентные задания не привязаны к интерактивному сеансу, поэтому их подключают отдельно: либо через список предметов отладки после старта задания, либо через автоматическое подключение в настройках. Для регламентных заданий с коротким временем выполнения автоподключение — практически единственный способ успеть до завершения.

HTTP-сервисы и веб-сервисы отлаживаются через подключение к рабочему процессу, обслуживающему публикацию. Запрос отправляется извне (браузером, тестовой утилитой), а точка останова в модуле сервиса срабатывает в подключённом предмете отладки. Здесь важно, чтобы публикация и отладка смотрели на одну и ту же информационную базу.

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

Как выбрать способ подключения

Код выполняется в интерактивном сеансе пользователяЗапустите отладку через F5 или подключитесь к сеансу
Код выполняется в фоновом или регламентном заданииВключите автоматическое подключение фоновых заданий в предметах отладки
Ошибка возникает на сервере и не видна на клиентеПроверьте разрешение отладки в кластере и подключите предмет «Сервер»
Ошибку перехватывает Попытка/ИсключениеВключите остановку по ошибке с фильтром по тексту

Типичные проблемы и ограничения отладчика

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

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

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

Типичные ошибки
01
Отладка рабочей базы вместо копии — риск частично записанных данных при обрыве сеанса
02
Поиск ошибки в клиентском коде, тогда как исключение возникает на сервере без подключённого предмета «Сервер»
03
Сотни ручных продолжений в цикле вместо условной точки останова
04
Забытая включённая отладка на рабочем сервере — лишняя нагрузка на все сеансы
05
Изменение модуля во время отладочного сеанса и удивление, почему исполняется старый код
Итог

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

Отладчик 1С управляет исполняющими модулями через отладочный протокол: ставьте точки (в том числе условные и по ошибке), двигайтесь по шагам, смотрите значения в табло. Главные условия успеха — разрешённая отладка на сервере, правильный подключённый предмет отладки и работа на копии базы при отладке изменяющего данные кода.

Частые вопросы об отладчике 1С

Почему точка останова не срабатывает, хотя код точно выполняется?

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

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

Да, через подключение к его сеансу: «Отладка — Подключение» показывает активные сеансы. Пользователь продолжит работу, а при достижении точки останова его приложение приостановится — об этом стоит предупредить, чтобы пользователь не завершил сеанс принудительно.

Как поймать ошибку, которая скрыта конструкцией Попытка–Исключение?

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

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

Да, разрешённая отладка добавляет накладные расходы на исполнение кода в кластере. На продуктивном сервере её включают на время диагностики и отключают после, а регулярную разработку ведут на тестовых серверах.

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

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

Чем отладчик отличается от технологического журнала?

Отладчик показывает пошаговое выполнение встроенного кода и значения переменных. Технологический журнал фиксирует события платформы: запросы к СУБД, блокировки, ошибки, вызовы. Для проблем производительности и блокировок нужен техножурнал, для логики кода — отладчик; часто их применяют вместе.