Управление целевым объектом

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

Когда отладчик подключается к целевому объекту в режиме ядра, отладчик оставляет целевой объект запущенным, если вы не используете параметр командной строки-b, целевая система перестала отвечать (то есть сбой) или целевая система по-прежнему остановлена из-за предыдущего действия отладки ядра.

Когда отладчик запускается или подключается к целевому объекту пользовательского режима, отладчик немедленно останавливает целевой объект, если не используется параметр командной строки -g . Дополнительные сведения см. в разделе Начальная точка останова.

При выполнении целевого объекта

При выполнении целевого объекта большинство действий отладчика недоступны.

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

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

При остановке целевого объекта

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

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

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

  • Чтобы завершить текущую функцию и остановиться при возврате, используйте команды Step Out или Trace и Watch . Команда Step Out продолжается до завершения текущей функции. Трассировка и контрольные значения продолжаются до завершения текущей функции, а также отображает сводку вызовов функции. Однако необходимо выполнить команду Trace и Watch в первой инструкции рассматриваемой функции.

  • При возникновении исключения можно использовать команды Go с exception Handled и Go with Exception Not Handled , чтобы возобновить выполнение и управлять состоянием исключения. (Дополнительные сведения об исключениях см. в разделе Управление исключениями и событиями.)

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

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

  • (Только WinDbg) Чтобы закрыть целевое приложение и очистить отладчик, используйте команду Остановить отладку . Эта команда позволяет начать отладку другого целевого объекта.

Командные формы

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

Команды можно использовать в следующих формах.

Get-Help Команда WinDbg Сочетания клавиш WinDbg Действие

Отладка | Запуск до курсора

F7

CTRL+F10

(Только WinDbg) Выполняется до тех пор, пока не достигнет линии, которую помечает курсор.

Отладка | Остановка отладки

SHIFT+F5

Останавливает всю отладку и закрывает целевой объект.

(только CDB/KD) CTRL+C

Отладка | Перерыв

CTRL +BREAK

Выполнение останавливается, и отладчик врывается в целевой объект.

.restart (перезапуск целевого приложения)

Отладка | Перезапустить

CTRL+SHIFT+F5

(Только в пользовательском режиме) Перезапускает целевое приложение.

g (Go)

Отладка | Пойти

F5

Целевой объект выполняется свободно.

gc (перейти из условной точки останова)

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

gh (Go с обработанной обработкой исключения)

Отладка | Обработанное исключение Go

То же, что и g (Go), за исключением того, что текущее исключение обрабатывается как обработанное.

gn (Go с исключением не обрабатывается)

Отладка | Перейти необработанное исключение

То же, что и g (Go), за исключением того, что текущее исключение обрабатывается как необработанное.

gu (Go Up)

Отладка | Шаг с выходом

SHIFT+F11

Target выполняется до завершения текущей функции.

p (шаг)

Отладка | Шаг с обходом

F10

Target выполняет одну инструкцию. Если эта инструкция является вызовом функции, эта функция выполняется как один шаг.

pa (шаг к адресу)

Целевой объект выполняется до достижения указанного адреса. Отображаются все шаги в этой функции (но шаги в вызываемых функциях не являются).

pc (шаг к следующему вызову)

Target выполняется до следующей инструкции вызова . Если текущая инструкция является инструкцией вызова , этот вызов выполняется полностью и выполнение продолжается до следующего вызова.

pct (шаг к следующему вызову или возврату)

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

ph (шаг к следующей инструкции ветвления)

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

pt (шаг к следующему возврату)

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

t (трассировка)

Отладка | Шаг с заступом

F11

F8

Target выполняет одну инструкцию. Если эта инструкция является вызовом функции, отладчик выполняет трассировку в этом вызове.

ta (трассировка по адресу)

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

tb (трассировка до следующей ветви)

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

tc (трассировка до следующего вызова)

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

tct (трассировка до следующего вызова или возврата)

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

th (трассировка до следующей инструкции ветвления)

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

tt (трассировка до следующего возврата)

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

wt (данные трассировки и контрольных значений)

Целевой объект выполняется до завершения всей указанной функции. Затем отобразится статистика.

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

Параметры командной строки

Если вы не хотите, чтобы приложение немедленно завершалось при запуске или загрузке, используйте CDB или WinDbg вместе с параметром командной строки -g . Дополнительные сведения об этой ситуации см. в разделе Начальная точка останова.

CDB и WinDbg также поддерживают параметр командной строки-G. Этот параметр приводит к завершению сеанса отладки при правильном завершении приложения.

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

cdb -g -G ApplicationName 

Для задания времени ожидания перерыва можно использовать параметр командной строки-pt. Существуют определенные проблемы, которые могут сделать целевой объект неспособным взаимодействовать с отладчиком. Если команда прерывания выдана и отладчик не может пробиться в целевой объект после этого времени, отладчик отображает сообщение "Время ожидания останова истекло".

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

Время ожидания по умолчанию — 30 секунд.