Как вернуться в место вызова процедуры при отладке в 1С

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

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

Метод 1. Использование команды «Шагнуть из» (Shift + F11)

Рассмотрим наиболее стандартный способ завершения выполнения текущей процедуры с автоматическим возвратом в точку вызова. Когда мы находимся внутри функции и понимаем, что дальнейший анализ ее внутренних строк нам не требуется, мы можем воспользоваться командой Shift + F11.

Проанализируем, как работает этот механизм:

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

Этот метод полезен, если нам нужно именно продолжить исполнение алгоритма, вернувшись на уровень выше.

Метод 2. Визуальный возврат через «Стек вызовов»

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

Разберем по шагам, как работать с этим инструментом:

  1. Откроем окно «Стек вызовов». Для этого воспользуемся горячими клавишами Ctrl + Alt + C (или через меню «Отладка» — «Стек вызовов»).
  2. В открывшемся списке мы увидим иерархию вызовов: самая верхняя строка — текущая процедура, вторая строка — процедура, которая её вызвала, и так далее.
  3. Двойным кликом по второй строке сверху мы переместим фокус текстового редактора в место вызова.

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

Метод 3. Команда «Идти до курсора» (Ctrl + F10)

Выясним причину, по которой этот метод часто называют самым универсальным. Если вам нужно вернуться в вызывающую процедуру, но не на следующую строку после вызова (как делает Shift + F11), а на какой-то конкретный участок кода ниже, используйте Ctrl + F10.

Рассмотрим ситуацию на примере:


Процедура Главная()
    ВыполнитьРасчет(); // Мы зашли сюда по F11
    А = 10;
    Б = 20; // Мы хотим сразу оказаться здесь
КонецПроцедуры

Находясь внутри ВыполнитьРасчет(), вы можете просто кликнуть мышкой на строку Б = 20; в основном модуле и нажать Ctrl + F10. Программа выполнит все действия и замрет на выбранной вами позиции.

Метод 4. Навигация по истории (Ctrl + «-») против отладки

Часто начинающие разработчики путают навигацию по коду с навигацией по исполнению. Комбинация клавиш Ctrl + - (минус) возвращает курсор в предыдущее место в текстовом редакторе. Это работает, если вы перешли к определению процедуры через F12.

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

Метод 5. Использование временных закладок

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

Дополнительные возможности при просмотре контекста

Когда мы визуально вернулись в вызывающую процедуру через стек вызовов, нам часто нужно проверить значения переменных. Рассмотрим, как это сделать максимально эффективно:

Используйте сочетание Shift + F9 (Вычислить выражение). Если вы выбрали в стеке вызовов родительскую процедуру, то в окне вычисления выражений вы сможете обращаться к переменным именно этой процедуры. Это бесценно при поиске причин передачи некорректных параметров в дочерние методы.

Посмотрим на пример логики:

  1. Вы находитесь в глубоко вложенной функции РассчитатьНалог().
  2. Вы понимаете, что параметр СуммаДохода пришел неверным.
  3. Через Ctrl + Alt + C переходите на уровень выше.
  4. Смотрите значения локальных переменных в Табло, чтобы понять, где именно в родительском коде произошла ошибка при формировании данных для расчета.

Таким образом, мы разобрали комплексный подход к навигации. Сочетание горячих клавиш Shift + F11 для исполнения кода и Ctrl + Alt + C для визуального анализа контекста делает процесс отладки в 1С прозрачным и управляемым.

← На главную