В процессе разработки и отладки программного кода в среде 1С:Предприятие программисты часто сталкиваются с ситуацией, когда после глубокого погружения в цепочку вызовов (используя клавишу F11 — «Шагнуть внутрь») необходимо быстро вернуться назад, к вызывающей процедуре или функции. Понимание механизмов навигации в отладчике позволяет значительно сэкономить время и избежать повторного запуска сеанса отладки. В этой статье мы подробно разберем все доступные способы перемещения между уровнями стека вызовов и навигации по коду.
Рассмотрим наиболее стандартный способ завершения выполнения текущей процедуры с автоматическим возвратом в точку вызова. Когда мы находимся внутри функции и понимаем, что дальнейший анализ ее внутренних строк нам не требуется, мы можем воспользоваться командой Shift + F11.
Проанализируем, как работает этот механизм:
Этот метод полезен, если нам нужно именно продолжить исполнение алгоритма, вернувшись на уровень выше.
Бывают случаи, когда нам не нужно продолжать выполнение кода, а требуется лишь посмотреть на код вызывающей процедуры или проверить значения переменных в контексте «родительского» метода. Здесь нам поможет окно Стек вызовов.
Разберем по шагам, как работать с этим инструментом:
Ctrl + Alt + C (или через меню «Отладка» — «Стек вызовов»).Важный нюанс: При таком переходе «желтая стрелка» (текущая точка исполнения) останется в дочерней процедуре, а в вызывающей появится «синяя стрелка». Это позволяет изучать контекст, не прерывая текущий шаг отладки. Более того, при переключении уровней в стеке вызовов, окно «Табло» и значения локальных переменных будут автоматически переключаться на контекст выбранной процедуры.
Выясним причину, по которой этот метод часто называют самым универсальным. Если вам нужно вернуться в вызывающую процедуру, но не на следующую строку после вызова (как делает Shift + F11), а на какой-то конкретный участок кода ниже, используйте Ctrl + F10.
Рассмотрим ситуацию на примере:
Процедура Главная()
ВыполнитьРасчет(); // Мы зашли сюда по F11
А = 10;
Б = 20; // Мы хотим сразу оказаться здесь
КонецПроцедуры
Находясь внутри ВыполнитьРасчет(), вы можете просто кликнуть мышкой на строку Б = 20; в основном модуле и нажать Ctrl + F10. Программа выполнит все действия и замрет на выбранной вами позиции.
Часто начинающие разработчики путают навигацию по коду с навигацией по исполнению. Комбинация клавиш Ctrl + - (минус) возвращает курсор в предыдущее место в текстовом редакторе. Это работает, если вы перешли к определению процедуры через F12.
Однако, если переход был совершен по F11 во время отладки, Ctrl + - может не сработать, так как фокус отладчика принудительно удерживает вас на текущей строке исполнения. Для возврата именно «взгляда» на предыдущую позицию лучше использовать стек вызовов, как было описано выше.
Проанализируем ситуацию, когда процедура вызова очень сложная, и вы боитесь потерять в ней ориентацию после возврата. Перед тем как нажать F11 и «провалиться» внутрь, установите закладку.
Ctrl + F2 на строке вызова, чтобы пометить её.F2, чтобы мгновенно переместить курсор обратно к строке с закладкой, независимо от того, где сейчас стоит отладчик.Когда мы визуально вернулись в вызывающую процедуру через стек вызовов, нам часто нужно проверить значения переменных. Рассмотрим, как это сделать максимально эффективно:
Используйте сочетание Shift + F9 (Вычислить выражение). Если вы выбрали в стеке вызовов родительскую процедуру, то в окне вычисления выражений вы сможете обращаться к переменным именно этой процедуры. Это бесценно при поиске причин передачи некорректных параметров в дочерние методы.
Посмотрим на пример логики:
РассчитатьНалог().СуммаДохода пришел неверным.Ctrl + Alt + C переходите на уровень выше.Табло, чтобы понять, где именно в родительском коде произошла ошибка при формировании данных для расчета.Таким образом, мы разобрали комплексный подход к навигации. Сочетание горячих клавиш Shift + F11 для исполнения кода и Ctrl + Alt + C для визуального анализа контекста делает процесс отладки в 1С прозрачным и управляемым.