Навигация по коду с помощью отладчика Visual Studio

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

Примечание.

Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ, посвященный отладке для начинающих, и статью Методы и инструменты отладки.

Запуск отладки и ввод режима останова

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

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

  • Задайте точку останова и запустите приложение.

  • Запустите в определенное расположение или функцию.

    Например, в редакторе кода в Visual Studio можно использовать команду "Запуск к курсору ", чтобы запустить приложение, с присоединенным отладчиком и ввести режим останова. Затем можно использовать команды шага для навигации по коду.

    Анимация, показывающая выбор команды

    Анимация, показывающая выбор команды

Команды пошагового выполнения кода можно использовать для запуска приложения, но чаще используются после ввода режима останова.

Некоторые команды навигации в основном используются в режиме останова (то есть при приостановке работы отладчика).

Режим отладки и останова

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

Большинство окон отладчика, таких как Модули и Контрольные значения, доступны только тогда, когда отладчик присоединен к приложению. Некоторые возможности отладчика, такие как просмотр значений переменных в окне локальных переменных или вычисление выражений в окне контрольных значений, доступны только при приостановке отладчика (то есть в режиме приостановки выполнения).

Примечание.

Если во время приостановки выполнения кода не загружены исходные файлы или файлы символов (PDB), отладчик отображает страницу Исходный файл не найден или Символы не найдены, которая поможет найти и загрузить файлы. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio. Если вы не можете загрузить исходные файлы или файлы символов, можно выполнить отладку инструкций на языке ассемблера в окне Дизассемблирование.

Пошаговое выполнение кода

Шаг кода относится к выполнению кода приложения по одному оператору за раз с присоединенным отладчиком. Команды шага отладчика помогают наблюдать за эффектами каждой инструкции и узнать больше о его потоке выполнения.

Шаг в код

Для остановки выполнения на каждом операторе во время отладки используйте команду Отладка>Шаг с заходом или нажмите клавишу F11.

Отладчик осуществляет пошаговое выполнение операторов кода, а не физических строк. Например, предложение if может быть записано в одной строке:

int x = 42;
string s = "Not answered";
if( int x == 42) s = "Answered!";

Но при пошаговом выполнении этой строки отладчик рассматривает условие как один шаг, а результат — как другой шаг. В предыдущем примере условие выполняется.

При вызове вложенных функций команда Шаг с заходом позволяет попасть в самую глубокую вложенную функцию. Например, если использовать Шаг с заходом на вызове Func1(Func2()), отладчик заходит в функцию Func2.

Совет

При выполнении каждой строки кода можно наводить указатель мыши на переменные, чтобы просматривать их значения, или использовать окна Локальные переменные и Контрольные значения для наблюдения за изменением значений. Кроме того, можно визуально отслеживать стек вызовов при выполнении шагов с заходом в функции. (Сведения, касающиеся только Visual Studio Enterprise, см. в статье Сопоставление методов в визуализации стека вызовов при отладке.)

Пошаговое выполнение кода и пропуск некоторых функций

При отладке можно пропустить функцию. Или вы можете знать, что некоторый код работает, например хорошо протестированный код библиотеки. Чтобы пропустить код во время пошагового выполнения, можно использовать приведенные ниже команды. Функции по-прежнему выполняются, но отладчик пропускает их.

Команда с клавиатуры Команда меню «Отладка» Description
F10 Шаг с обходом Если текущая строка содержит вызов функции, команда Шаг с обходом выполняет код, а затем останавливает выполнение в первой строке кода после возврата управления вызываемой функцией.
Shift+F11 Шаг с выходом Команда Шаг с выходом возобновляет выполнение кода и приостанавливает выполнение, когда текущая функция возвращает управление. Отладчик пропускает текущую функцию.

Запуск в определенное расположение или функцию

Вам может потребоваться выполнить код непосредственно до определенного места или функции, если вы точно знаете, какой код нужно проверить или с какого места следует начать отладку.

  • Если вы считаете, что вы хотите повторно использовать точку останова, рекомендуется задать точку останова.
  • Другие методы предназначены для удобства и аналогичны настройке временной точки останова.

Выполнение до точки останова в коде

Чтобы задать простую точку останова в коде, щелкните в левом поле напротив строки кода, в которой нужно приостановить выполнение. Можно также выбрать строку и нажать клавишу F9, выбрать команду Отладка>Переключить точку останова или щелкнуть правой кнопкой мыши и выбрать команду Точка останова>Вставить точку останова. Точка останова отображается как красный кружок в левом поле рядом со строкой кода. Отладчик приостанавливает выполнение непосредственно перед выполнением строки.

Снимок экрана: задание точки останова.

Снимок экрана: задание точки останова.

Точки останова в Visual Studio предоставляют широкий набор функций, таких как условные точки останова и точки трассировки. Дополнительные сведения см. в статье Использование точек останова.

Выполнение до точки останова функции

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

Чтобы указать точку останова функции по имени:

  1. Выберите команду Отладка>Создать точку останова>Точка останова функции.

  2. В диалоговом окне Новая точка останова функции введите имя функции и выберите ее язык:

    Снимок экрана: диалоговое окно создания точки останова функции.

    Снимок экрана: диалоговое окно создания точки останова функции.

  3. Нажмите ОК.

Если функция перегружается или находится в нескольких пространствах имен, нужную функцию можно выбрать в окне Точки останова:

Снимок экрана с окном точек останова.

Снимок экрана с окном точек останова.

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

  1. Во время отладки откройте окно Стек вызовов, выбрав пункт Отладка>Окна>Стек вызовов.

  2. В окне Стек вызовов щелкните правой кнопкой мыши имя функции и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10.

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

Выполнение до расположения курсора

Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, а затем щелкните ее правой кнопкой мыши и выберите команду Выполнить до текущей позиции или нажмите клавиши CTRL+F10. Выбор параметра "Запуск к курсору " аналогичен настройке временной точки останова.

Принудительное выполнение до расположения курсора

Чтобы выполнить код до позиции курсора, в окне исходного кода или в окне Стек вызовов выберите строку, в которой нужно прервать выполнение, а затем щелкните ее правой кнопкой мыши и выберите элемент Force Run To Cursor (Принудительное выполнение до расположения курсора). Если выбрать параметр Принудительное выполнение до курсора, все точки останова и первичные исключения будут пропускаться, пока отладчик не достигнет строки кода, где находится курсор.

Выполнение до щелкнутого

Во время приостановки работы отладчика можно навести указатель мыши на оператор в исходном коде или в окне Дизассемблирование и щелкнуть значок с зеленой стрелкой Выполнить до этого места. Использование запуска для щелчка аналогично настройке временной точки останова.

Снимок экрана: команда

Примечание.

Команда Выполнение до щелчка доступна начиная с Visual Studio 2017.

Принудительное выполнение для щелчка

Когда работа отладчика приостановлена, вы можете навести указатель на оператор в исходном коде, удерживая нажатой клавишу SHIFT, и выбрать элемент Принудительное выполнение до текущей позиции (значок с двумя зелеными стрелками). При выборе этого параметра приложение присоединяет отладчик Visual Studio и приостанавливает выполнение в положении курсора. Все точки останова и первичные исключения, обнаруженные во время выполнения, временно отключаются.

Снимок экрана: команда

Примечание.

Команда Принудительное выполнение до щелчка доступна начиная с Visual Studio 2022.

Приостановка выполнения кода вручную

Чтобы приостановить выполнение в следующей доступной строке кода в выполняющемся приложении, выберите команду Отладка>Прервать все или нажмите клавиши CTRL+ALT+BREAK.

Отладка кода, не являющегося пользовательским

По умолчанию отладчик пытается выполнить отладку только кода вашего приложения, так как включена функция Только мой код. Подробнее о том, как эта функция работает с проектами различных типов и на разных языках, а также о том, как настроить ее, см. в статье Только мой код.

Для просмотра кода платформы, кода сторонней библиотеки или системных вызовов во время отладки можно отключить функцию "Только мой код". В разделе Инструменты (или Отладка) >Параметры>Отладка снимите флажок Включить только мой код. Когда функция "Только мой код" отключена, в окнах отладчика отображается код, не являющийся пользовательским, и отладчик может выполнять его по шагам.

Примечание.

Режим "Только мой код" не поддерживается для проектов устройств.

Отладка системного кода

Если вы загрузили отладочные символы для системного кода Майкрософт и отключили режим "Только мой код", можно производить шаг с заходом в системный вызов так же, как в любой другой вызов.

Начиная с Visual Studio 2022 версии 17.7, можно автоматически выполнить компиляцию кода .NET при переходе во внешний код без необходимости вручную загружать символы отладки. Дополнительные сведения см. в статье "Создание исходного кода из сборок .NET во время отладки".

Сведения о загрузке символов Майкрософт см. в разделе Настройка расположения файлов символов и параметров загрузки.

Чтобы загрузить символы для определенного системного компонента, выполните указанные ниже действия.

  1. Во время отладки откройте окно Модули, выбрав пункт Отладка>Окна>Модули или нажав клавиши CTRL+ALT+U.

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

Шаг с заходом в свойства и операторы в управляемом коде

По умолчанию отладчик обходит свойства и операторы при пошаговом выполнении в управляемом коде. В большинстве случаев это повышает удобство и эффективность отладки. Чтобы включить шаг в свойства или операторы, выберите "Параметры отладки>". На странице Отладка>Общие снимите флажок Обход свойств и операторов (только управляемый код).

Перемещение указателя для изменения потока выполнения

Вы можете изменить следующую инструкцию, которая будет выполняться путем перемещения желтого указателя выполнения. Эту функцию можно использовать в режиме останова.

Это расширенная функция отладчика. Дополнительные сведения см. в разделе "Перемещение указателя выполнения".