Разработка и Конфигурация · 11 мин
Как работает отладчик 1С: устройство и практика использования
Как работает отладчик 1С: запуск предмета отладки, точки останова, пошаговое выполнение, табло выражений и типичные ошибки при поиске дефектов в коде.
Отладчик 1С — это встроенный в конфигуратор инструмент, который позволяет выполнять код платформы по шагам, останавливаться в заданных точках и наблюдать, какие значения принимают переменные в каждый момент времени. Он работает поверх клиент-серверной архитектуры: конфигуратор через отладочный протокол подключается к исполняющему модулю — клиентскому приложению, серверу 1С или фоновому заданию — и управляет ходом выполнения.
Понимание того, как устроен отладчик, важно не только для исправления ошибок, но и для изучения чужого кода: пошаговое прохождение типовых механизмов конфигурации показывает реальный порядок вызова обработчиков, состав параметров и содержимое объектов, которое в статическом тексте модуля неочевидно.
Ключевая особенность платформы 1С — код исполняется в разных контекстах: на клиенте, на сервере, в фоновых заданиях, в веб-сервисах. Отладчик умеет подключаться к каждому из этих исполнителей, но способ подключения и ограничения различаются, и именно это чаще всего вызывает вопросы у начинающих разработчиков.
Как устроен механизм отладки в платформе 1С
Отладка в 1С построена по схеме «конфигуратор — отладочный сервер — исполняющий модуль». Конфигуратор выступает управляющей стороной: он отправляет команды (остановиться, продолжить, сделать шаг) и получает данные о текущем состоянии — стек вызовов, значения переменных, текущую строку кода.
Исполняющий модуль — это процесс, где реально работает код: тонкий или толстый клиент, рабочий процесс сервера 1С (rphost), агент сервера. Для связи используется отладочный протокол, поэтому на сервере отладку необходимо явно разрешить — без этого конфигуратор не сможет подключиться к серверным процедурам.
Начиная с современных версий платформы, используется протокол отладки по HTTP, что упростило работу по сравнению со старым TCP-протоколом, особенно в распределённых инфраструктурах. Для файловых баз отладка доступна без дополнительной настройки серверной части, поскольку весь код исполняется в процессе клиентского приложения.
Как включить отладку и запустить предмет отладки
Для файловой информационной базы достаточно открыть конфигуратор и запустить отладку командой «Отладка — Начать отладку» или клавишей F5. Платформа запустит клиентское приложение в отладочном режиме, и все точки останова начнут срабатывать автоматически.
Для клиент-серверной базы предварительно нужно разрешить отладку на сервере. Это делается параметром запуска агента сервера либо через консоль кластера: в свойствах кластера устанавливается флаг разрешения отладки и при необходимости указывается протокол. После изменения настроек службу агента сервера требуется перезапустить.
Если приложение уже запущено без отладки, его можно подключить: «Отладка — Подключение» открывает список доступных предметов отладки, где выбирается нужный клиентский сеанс или фоновое задание. Для автоматического подключения фоновых заданий используется настройка «Отладка — Предметы отладки», где включается автоматическое подключение нужных типов.
- 1Откройте конфигуратор нужной информационной базы
- 2Для клиент-серверной базы убедитесь, что на сервере разрешена отладка
- 3Установите точки останова в нужных строках модуля
- 4Нажмите F5 или подключитесь к уже запущенному сеансу
- 5Воспроизведите действие пользователя, вызывающее отлаживаемый код
- 6Проверьте, что выполнение остановилось на точке останова
Точки останова: виды и управление остановкой
Обычная точка останова ставится кликом по левому полю редактора модуля или клавишей F9. Когда исполняющий модуль доходит до этой строки, выполнение приостанавливается, и управление передаётся в конфигуратор. Точку можно временно отключить без удаления — это удобно, когда она понадобится позже.
Условная точка останова срабатывает только при выполнении заданного условия, например когда переменная принимает конкретное значение. Это незаменимо в циклах: вместо сотен ручных продолжений выполнения отладчик остановится именно на нужной итерации. Условие задаётся в свойствах точки останова как выражение на встроенном языке.
Отдельный вид — остановка по ошибке. В настройках отладки можно включить остановку при возникновении любой ошибки или только при ошибках, содержащих заданный текст. Это позволяет поймать момент исключения даже там, где оно перехватывается конструкцией «Попытка... Исключение» и в обычном режиме остаётся незаметным.
Пошаговое выполнение и навигация по коду
Когда выполнение остановлено, доступны команды пошагового движения. «Шагнуть через» (F10) выполняет текущую строку целиком, не заходя внутрь вызываемых процедур. «Шагнуть в» (F11) переходит внутрь вызова — так можно проследить логику вложенных функций. «Шагнуть из» (Shift+F11) доводит текущую процедуру до конца и останавливается в вызвавшем её коде.
Команда «Идти до курсора» выполняет код до строки, где стоит курсор редактора, — быстрый способ пропустить неинтересный фрагмент без расстановки временных точек. Окно стека вызовов показывает цепочку процедур, приведшую к текущей точке, и позволяет переключаться между уровнями, чтобы посмотреть локальные переменные на каждом уровне.
Полезная возможность — изменение текущей строки выполнения: можно вернуться назад и переисполнить фрагмент с другими значениями переменных. Применять это следует осторожно: если код уже выполнил действия с базой данных или внешними системами, повторное выполнение приведёт к повтору этих действий.
Просмотр значений: табло, выражения и вычисление
Табло — основное окно наблюдения: в него добавляются переменные и произвольные выражения, и при каждом останове отображаются их актуальные значения. Выражения в табло могут быть сложными: обращения к свойствам объектов, вызовы методов, запросы к данным через контекст.
Окно «Вычислить выражение» (Shift+F9) выполняет произвольный код в текущем контексте остановленного выполнения. Это позволяет не только смотреть, но и менять значения переменных на лету — например, подставить другое значение и продолжить выполнение, чтобы проверить гипотезу без перезапуска.
При работе с коллекциями — таблицами значений, массивами, выборками запросов — значения разворачиваются в дерево с возможностью просмотра каждой строки и колонки. Для ссылочных объектов видны реквизиты, но следует помнить: обращение к некоторым свойствам может инициировать обращение к базе данных, что влияет на скорость отладки больших объёмов.
Частая ситуация: ошибка воспроизводится только у конкретного пользователя. Вместо поиска по его описанию включите остановку по ошибке с текстом из сообщения и попросите пользователя повторить действие — отладчик остановится точно в месте исключения с полным стеком вызовов.
Отладка серверного кода, фоновых заданий и веб-сервисов
Серверные процедуры отлаживаются так же, как клиентские, но требуют подключённого предмета отладки «Сервер». При клиент-серверном вызове отладчик автоматически переключает контекст: сработавшая точка в серверной процедуре покажет серверный стек и серверные переменные.
Фоновые задания и регламентные задания не привязаны к интерактивному сеансу, поэтому их подключают отдельно: либо через список предметов отладки после старта задания, либо через автоматическое подключение в настройках. Для регламентных заданий с коротким временем выполнения автоподключение — практически единственный способ успеть до завершения.
HTTP-сервисы и веб-сервисы отлаживаются через подключение к рабочему процессу, обслуживающему публикацию. Запрос отправляется извне (браузером, тестовой утилитой), а точка останова в модуле сервиса срабатывает в подключённом предмете отладки. Здесь важно, чтобы публикация и отладка смотрели на одну и ту же информационную базу.
Как выбрать способ подключения
Типичные проблемы и ограничения отладчика
Самая частая жалоба — «точка останова не срабатывает». Причины почти всегда одни и те же: отлаживается не та база (конфигуратор открыт от копии, а пользователь работает в рабочей), не подключён нужный предмет отладки, код выполняется в другом контексте, чем ожидалось, или модуль был изменён после запуска сеанса и исполняется старая версия.
Отладка заметно замедляет выполнение, особенно при включённой остановке по ошибке и при просмотре больших коллекций в табло. На сервере с высокой нагрузкой включённая отладка добавляет накладные расходы для всех сеансов, поэтому на рабочих серверах её включают только на время поиска проблемы.
Есть и принципиальные ограничения: нельзя отлаживать код, исполняемый в момент соединения с базой до инициализации сеанса, затруднена отладка в распределённых базах при обмене, а внешние компоненты и запросы к СУБД отладчиком не покрываются — для их анализа используются технологический журнал и средства СУБД.
Что важно запомнить
Отладчик 1С управляет исполняющими модулями через отладочный протокол: ставьте точки (в том числе условные и по ошибке), двигайтесь по шагам, смотрите значения в табло. Главные условия успеха — разрешённая отладка на сервере, правильный подключённый предмет отладки и работа на копии базы при отладке изменяющего данные кода.
Частые вопросы об отладчике 1С
Почему точка останова не срабатывает, хотя код точно выполняется?
Проверьте три вещи: подключён ли предмет отладки, в котором исполняется код (клиент, сервер, фоновое задание); та ли это информационная база, что открыта в конфигураторе; не изменялся ли модуль после запуска сеанса — в этом случае перезапустите отлаживаемое приложение.
Можно ли отлаживать код у пользователя, не прерывая его работу?
Да, через подключение к его сеансу: «Отладка — Подключение» показывает активные сеансы. Пользователь продолжит работу, а при достижении точки останова его приложение приостановится — об этом стоит предупредить, чтобы пользователь не завершил сеанс принудительно.
Как поймать ошибку, которая скрыта конструкцией Попытка–Исключение?
Включите остановку по ошибке в настройках отладки и задайте фильтр по фрагменту текста ошибки. Отладчик остановится в момент возникновения исключения, до его перехвата, с полным стеком вызовов и значениями переменных.
Замедляет ли включённая отладка работу сервера 1С?
Да, разрешённая отладка добавляет накладные расходы на исполнение кода в кластере. На продуктивном сервере её включают на время диагностики и отключают после, а регулярную разработку ведут на тестовых серверах.
Как отладить регламентное задание, которое выполняется за секунды?
Включите автоматическое подключение фоновых заданий в настройках предметов отладки и поставьте точку останова в начале метода задания. Альтернатива — временно вызвать тот же метод интерактивно из обработки на копии базы.
Чем отладчик отличается от технологического журнала?
Отладчик показывает пошаговое выполнение встроенного кода и значения переменных. Технологический журнал фиксирует события платформы: запросы к СУБД, блокировки, ошибки, вызовы. Для проблем производительности и блокировок нужен техножурнал, для логики кода — отладчик; часто их применяют вместе.