Перейти к содержанию

Шаги

Когда программа остановлена, двигать её можно вот так.

Команды

Клавиша Действие Что делает
F9 продолжить выполнять до следующей точки останова или до конца программы
F8 шаг с обходом выполнить текущую строку, остановиться на следующей в этом же фрейме
F7 шаг внутрь войти в вызов на текущей строке
Shift+F8 шаг наружу доработать до возврата из текущей функции
Cmd+F2 / Ctrl+F2 остановить завершить сессию

Есть ещё два действия без привязки по умолчанию: pause — прервать работающую программу — и restart. Назначьте им клавиши в [ui.keymaps], если они вам нужны; см. Настройка → Интерфейс.

Эти клавиши работают в любом месте окна, в том числе когда курсор стоит в поле ввода Evaluate или Watches. Именно поэтому они функциональные: так они никогда не конфликтуют с набираемым текстом.

Шаг с обходом против шага внутрь

На строке с вызовом функции:

  • шаг с обходом выполняет вызов целиком и останавливается на следующей строке. Годится, когда вызываемому вы доверяете;
  • шаг внутрь останавливается на первой строке внутри вызываемого. Годится, когда проблема может быть там.

Если вызова на строке нет, оба делают одно и то же.

Шаг наружу

Доводит текущую функцию до конца и останавливается сразу после возврата, уже в вызывающем коде. Самый быстрый способ вернуться, если вы зашли внутрь по ошибке или уже посмотрели достаточно.

Что происходит на каждой остановке

Каждая остановка обновляет всю картину:

  • Стек вызовов перестраивается, выбранным становится верхний фрейм;
  • Переменные показывают области видимости выбранного фрейма;
  • Watches пересчитываются, все до одного;
  • в панели исходника отмечается текущая строка.

Выбор другого фрейма в стеке переводит Variables и Evaluate на него, не двигая при этом исполнение.

Шаги в многопоточной программе

Шаг применяется к тому потоку, который сейчас выбран отладчиком. Остальные потоки могут работать или стоять — это зависит от политики адаптера. Какой поток перед вами, видно в панели Потоки.

Если шаг словно застрял

Шаг, который не завершается, обычно означает, что программа заблокирована: ждёт ввод-вывод, блокировку или сетевой вызов внутри строки, которую вы обошли. Отвечает ли ещё адаптер, видно в панели логов — см. Логи и диагностика.