Запуск, приостановка, шаг, последовательное выполнение и остановка отладки в Visual Studio

Начало отладки проекта VS; присоединение к процессу; приостановка выполнения кода; пошаговое выполнение кода; выполнение до текущей позиции; выполнение до функции в стеке вызовов; задание следующего оператора; пошаговое выполнение "только моего кода", остановка и перезапуск отладки; отсоединение от отлаженного процесса.

Описание

Start debugging a VS project; attach to a process

Break into code, step or run through code, set the next statement to execute

Stop, restart debugging; detach from the debugged process

Запуск отладки проекта VS; присоединение к процессу

  • Start debugging a VS project**|**Attach to a process

Запуск отладки проекта VS

Открывая решение в Visual Studio, вы имеете три варианта запуска отладки.

Выберите Отладка, Начать отладку (на клавиатуре: F5).

Приложение запускается и выполняется до возникновения одного из следующих событий:

  • Отладчик достигает точки останова.

  • Вы выбираете команду Остановить отладку в меню Отладка.

  • Возникает исключение.

  • Происходит завершение работы приложения.

Выберите Отладка, Шаг с заходом (на клавиатуре: F11) или Отладка, Шаг с обходом (на клавиатуре: F10).

Приложение запускается и приостанавливается на первой строке.

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

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

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

К началуContents | Start debugging a VS project; attach to a process

Присоединение к процессу

Отладчик также может присоединиться к программе, которая выполняется в процессе за пределами Visual Studio. После присоединения к программе можно использовать команды отладчика, проверять состояние программы и выполнять другие действия. Возможности проверки программы могут быть ограничены в зависимости от того, была ли программа собрана с отладочной информацией, имеется ли доступ к исходному коду программы, а также отслеживает ли JIT-компилятор среды CLR отладочную информацию.

Присоединение к процессу, выполняющемуся на локальном компьютере.

Выберите Отладка, Присоединиться к процессу. В диалоговом окне Присоединение к процессу выделите процесс в списке Доступные процессы и нажмите кнопку Присоединиться.

Присоединение к процессу - диалоговое окно

Дополнительные сведения см. в разделе Присоединение к выполняемым процессам с использованием отладчика Visual Studio.

К началуContents | Start debugging a VS project; attach to a process

Приостановка выполнения кода; пошаговое или непрерывное выполнение кода; задание следующего оператора для выполнения

  • Break into code by using breakpoints or Break All**|Step into, over, or out of the code|Run to a specified location or function|Set the next statement to execute|Restrict stepping to Just My Code|Step into system calls|**Step into properties and operators in managed code

Приостановка выполнения кода с помощью точек остановка или команды "Прервать все"

Во время отладки приложения с помощью отладчика VS приложение может либо выполняться, либо находиться в режиме приостановки выполнения.

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

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

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

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

Задание точек останова в коде

Для установки простой точки останова в коде откройте исходный файл в редакторе Visual Studio. Поместите курсор в строку кода, на которой требуется приостановить выполнение, и выберите пункты Точка останова, Вставить точку останова в контекстном меню (на клавиатуре: F9). Отладчик приостанавливает выполнение непосредственно перед выполнением указанной строки.

Установка точки останова

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

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

Чтобы приостановить выполнение на следующей доступной строке кода в выполняющемся приложении, выберите Отладка, Прервать все (на клавиатуре: Ctrl+Alt+Break).

  • При отладке с включенным параметром "только мой код" приостановка происходит на следующей строке кода в вашем проекте. См. раздел Restrict stepping to Just My Code.

  • При отладке нескольких программ команда Приостановить все или точка останова по умолчанию влияет на выполнение всех отлаживаемых программ. См. раздел Configure the execution behavior of multiple processes.

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

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

К началуContents | Break into code, step or run through code, set the next statement to execute

Выполнение шагов с заходом в код, с обходом кода или выходом из него

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

Команда меню

Сочетание клавиш

Описание

Шаг с заходом

F11

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

Шаг с обходом

F10

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

Шаг с выходом

Shift+F11

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

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

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

    int x = 42;
    string s = "Not answered";
    if( int x == 42) s = "Answered!";
    
    Dim x As Integet = 42
    Dim s As String = "Not answered"
    If x = 42 Then s = "Answered!"
    

    При пошаговом выполнении этой строки отладчик обрабатывает условие как один шаг, а следствие как другой (в этом примере условие выполняется).

Сведения о визуальном отслеживании стека вызовов при выполнении шагов с заходом в функции см. в разделе Сопоставление методов в визуализации стека вызовов при отладке в Visual Studio.

К началуContents | Break into code, step or run through code, set the next statement to execute

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

Иногда необходимо осуществить выполнение до определенного места в коде, а затем сделать остановку. Если вы установили точку останова в место, где требуется приостановить выполнение, выберите Отладка, Начать отладку, если отладка еще не запущена, или Отладка, Продолжить (в обоих случаях можно нажать клавишу F5). При выполнении кода отладчик останавливается в следующей точке останова. Выбирайте команду Отладка, Продолжить, пока не будет достигнута требуемая точка останова.

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

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

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

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

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

Выполнение до функции, указанной по имени

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

Чтобы указать функцию по имени, последовательно выберите Отладка, Создать точку останова, Прервать в функции, а затем введите имя функции и другие идентификационные сведения.

Диалоговое окно “Создать точку останова”

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

Выбор точек останова - диалоговое окно

К началуContents | Break into code, step or run through code, set the next statement to execute

Задание следующего оператора для выполнения

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

Example2

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

  • В окне исходного кода перетащите желтую стрелку в то место этого же исходного файла, где необходимо задать следующий оператор.

  • В окне исходного кода установите курсор в строке, которую требуется выполнить следующей, и выберите в контекстном меню команду Задать следующий оператор.

  • В окне "Дизассемблирование" установите курсор на инструкцию ассемблера, которую требуется выполнить следующей, и выберите в контекстном меню команду Задать следующий оператор.

Предупреждение

Установка следующего оператора заставит программный счетчик инструкций перейти непосредственно на новое место.Следует применять эту команду с осторожностью.

  • Инструкции между старой и новой точками не выполняются.

  • При перемещении точки выполнения обратно, промежуточные инструкции не отменяются.

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

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

  • При включенной операции "Изменить и продолжить" команда Задать следующий оператор завершится неудачей, если вы внесете изменения, которые операция "Изменить и продолжить" не сможет немедленно применить.Например, это может произойти, если были внесены изменения внутри блока catch.При возникновении такой ситуациипоявится сообщение об ошибке, указывающее, что операция не поддерживается.

Примечание

В управляемом коде нельзя перемещать следующий оператор в следующих случаях:

  • Следующий оператор находится в методе, отличном от метода текущего оператора.

  • Отладка была запущена через JIT–отладку.

  • Выполняется очистка стека вызова.

  • Вызвано исключение System.StackOverflowException или System.Threading.ThreadAbortException.

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

К началуContents | Break into code, step or run through code, set the next statement to execute

Пошаговое выполнение "только моего кода"

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

Примечание

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

К началуContents | Break into code, step or run through code, set the next statement to execute

Шаг с заходом в системные вызовы

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

Сведения об отключении режима "Только мой код" см. в разделе Restrict stepping to Just My Code

Сведения о получении доступа к файлам символов (Майкрософт) см. в разделе Use symbol servers to find symbol files not on your local machine статьи Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio.

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

  1. Откройте окно "Модули" (на клавиатуре: Ctrl+Alt+U).

  2. Выберите модуль, для которого требуется загрузить символы.

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

  3. В контекстном меню выберите команду Загрузить символы.

К началуContents | Break into code, step or run through code, set the next statement to execute

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

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

К началуContents | Break into code, step or run through code, set the next statement to execute

Остановка и перезапуск отладки; отсоединение от отлаженного процесса

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

  • Stop debugging from VS**|Close the app that is being debugged|Restart debugging|**Detach from the debugged app

Остановка отладки из среды VS

Если программа была запущена из Visual Studio, то для прекращения работы отлаживаемого процесса выберите Отладка, Остановить отладку. Если вы присоединились к процессу, а не запустили его из Visual Studio, выполнение процесса будет продолжено.

К началуContents | Stop, restart debugging; detach from the debugged process

Завершение работы отлаживаемого приложения

При завершении работы отлаживаемого приложения отладка останавливается автоматически.

Перезапуск отладки

Для остановки текущего сеанса отладки и перезапуска запускаемого проекта в отладчике выберите Отладка, Перезапустить.

К началуContents | Stop, restart debugging; detach from the debugged process

Отсоединение от отлаженного приложения

Чтобы остановить отладку, не прерывая выполнение одного или нескольких отлаженных процессов, в меню "Отладка" выберите команду "Отсоединить все".

Совет

Дополнительные сведения о присоединении к нескольким процессам и управлении ими в Visual Studio см. в разделах Присоединение к выполняемым процессам с использованием отладчика Visual Studio и Отладка одного или нескольких процессов в Visual Studio.

К началуContents | Stop, restart debugging; detach from the debugged process