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