Управление целевым объектом
При отладке целевого приложения в пользовательском режиме или целевом компьютере в режиме ядра целевой объект может быть запущен или остановлен.
Когда отладчик подключается к целевому объекту в режиме ядра, отладчик покидает целевой объект, если вы не используете параметр командной строки -b, целевая система перестала отвечать (то есть сбой), или целевая система по-прежнему остановлена из-за предыдущего действия отладки ядра.
Когда отладчик запускает или подключается к целевому объекту пользовательского режима, отладчик немедленно останавливает целевой объект, если вы не используете параметр командной строки -g . Дополнительные сведения см. в разделе "Начальная точка останова".
Когда целевой объект запущен
При запуске целевого объекта большинство действий отладчика недоступны.
Если вы хотите остановить запущенный целевой объект, вы можете выполнить команду Break . Эта команда приводит к разрыву отладчика в целевой объект. То есть отладчик останавливает целевой объект, а все элементы управления получают отладчику. Приложение может не прерываться немедленно. Например, если все потоки в настоящее время выполняют системный код или находятся в операции ожидания, приложение прерывается только после возврата элемента управления в код приложения.
Если запущенный целевой объект обнаруживает исключение, если происходят определенные события, если точка останова достигнута, или если приложение закрывается обычно, целевой объект прерывается в отладчик. Это действие останавливает целевой объект и предоставляет отладчику все управление. Сообщение отображается в окне команды отладчика и описывает ошибку, событие или точку останова.
Когда целевой объект остановлен
Чтобы запустить или контролировать выполнение целевого объекта, можно выполнить следующее:
Чтобы начать работу приложения, выполните команду Go .
Чтобы выполнить пошаговое выполнение одной инструкции приложения в один раз, используйте команды step Into или Step Over . При возникновении вызова функции шаг вступает в функцию и продолжает выполнять шаги по каждой инструкции. Step Over обрабатывает вызов функции как один шаг. Когда отладчик находится в режиме сборки, пошаговое выполнение выполняется по одной инструкции компьютера за раз. Когда отладчик находится в режиме источника, пошаговое выполнение выполняется по одной исходной строке за раз.
Чтобы завершить текущую функцию и остановиться при возвращении, используйте команды Step Out или Trace and Watch . Команда Step Out продолжается до окончания текущей функции. Трассировка и контроль продолжается до завершения текущей функции, а также отображает сводку вызовов функции. Тем не менее, необходимо выполнить команду Trace и Watch при первой инструкции функции, о которой идет речь.
Если возникает исключение, можно использовать команды Go с обработкой исключений и Go с исключением Not Handled, чтобы возобновить выполнение и контролировать состояние исключения. (Дополнительные сведения об исключениях см. в разделе Управление исключениями и событиями.)
(только WinDbg) Если выбрать строку в окне дизассембли или окне источника, а затем использовать команду "Выполнить к курсору", программа запускается до тех пор, пока она не столкнется с выбранной строкой.
(только режим пользователя) Чтобы закрыть целевое приложение и перезапустить его с самого начала, используйте команду "Перезапустить ". Эту команду можно использовать только с процессом, созданным отладчиком. После перезапуска процесса он сразу же переходит в отладчик.
(только WinDbg) Чтобы закрыть целевое приложение и очистить отладчик, используйте команду Stop Debugging . Эта команда позволяет начать отладку другого целевого объекта.
Командные формы
Большинство команд для запуска или управления выполнением целевого объекта существуют как текстовые команды, команды меню, кнопки панели инструментов и сочетания клавиш. В качестве основных текстовых команд эти команды можно использовать в CDB, KD или WinDbg. (Текстовая форма команд часто поддерживает дополнительные параметры, например изменение расположения счетчика программы или выполнение фиксированного количества инструкций.) В WinDbg можно использовать команды меню, кнопки панели инструментов и сочетания клавиш.
Команды можно использовать в следующих формах.
Команда | Команда WinDbg | Сочетания клавиш WinDbg | Действие |
---|---|---|---|
Отладка | Запуск к курсору |
F7 CTRL + F10 |
(только WinDbg) Выполняется до тех пор, пока она не достигнет строки, которую помечает курсор. |
|
Отладка | Остановка отладки |
SHIFT + F5 |
Останавливает все отладки и закрывает целевой объект. |
|
(только CDB/KD) CTRL+C |
Отладка | Ломать |
CTRL+BREAK |
Выполнение останавливается, а отладчик разбивается на целевой объект. |
Отладка | Перезапуск |
CTRL+SHIFT+F5 |
(Только в пользовательском режиме) Перезапуск целевого приложения. |
|
Отладка | Идти |
F5 |
Целевой объект выполняется свободно. |
|
Возобновляет выполнение после условной точки останова. |
|||
Отладка | Исключение Go Handled |
То же, что и g (Go), за исключением того, что текущее исключение обрабатывается как обработанное. |
||
Отладка | Необработанное исключение |
То же, что и g (Go), за исключением того, что текущее исключение рассматривается как необработанное. |
||
Отладка | Шаг выхода |
SHIFT + F11 |
Целевой объект выполняется до завершения текущей функции. |
|
Отладка | Переступить |
F10 |
Целевой объект выполняет одну инструкцию. Если эта инструкция является вызовом функции, эта функция выполняется как один шаг. |
|
Целевой объект выполняется до тех пор, пока он не достигнет указанного адреса. Отображаются все шаги этой функции (но шаги в вызываемых функциях не являются). |
|||
Целевой объект выполняется до следующей инструкции вызова . Если текущая инструкция является инструкцией вызова , этот вызов выполняется полностью, и выполнение продолжается до следующего вызова. |
|||
Целевой объект выполняется до тех пор, пока он не достигнет инструкции вызова или возвращаемой инструкции. |
|||
Целевой объект выполняется до тех пор, пока он не достигнет какой-либо инструкции ветвления, включая условные или безусловные ветви, вызовы, возвраты и системные вызовы. |
|||
Целевой объект выполняется до тех пор, пока он не достигнет инструкции возврата . |
|||
Отладка | Шаг в |
F11 F8 |
Целевой объект выполняет одну инструкцию. Если эта инструкция является вызовом функции, отладчик выполняет трассировку в этот вызов. |
|
Целевой объект выполняется до тех пор, пока он не достигнет указанного адреса. Отображаются все шаги этой функции и вызываемые функции. |
|||
(Все режимы, кроме режима ядра, только в системах на основе x86) Целевой объект выполняется до достижения следующей инструкции ветви. |
|||
Целевой объект выполняется до следующей инструкции вызова . Если текущая инструкция является инструкцией по вызову , инструкция трассируется до достижения нового вызова . |
|||
Целевой объект выполняется до тех пор, пока он не достигнет инструкции вызова или возвращаемой инструкции. Если текущая инструкция является инструкцией вызова или инструкцией возврата , она будет отслеживаться до достижения нового вызова или возврата . |
|||
Целевой объект выполняется до тех пор, пока он не достигнет какой-либо инструкции ветвления, включая условные или безусловные ветви, вызовы, возвраты и системные вызовы. Если текущая инструкция является ветвлением, инструкция трассируется до достижения новой ветвления. |
|||
Целевой объект выполняется до тех пор, пока он не достигнет инструкции возврата . Если текущая инструкция является инструкцией возврата , то инструкция трассируется до достижения нового возвращаемого значения . |
|||
Целевой объект выполняется до завершения всей указанной функции. Затем отображаются статистические данные. |
Дополнительные сведения о перезапуске целевого компьютера см. в разделе "Сбой и перезагрузка целевого компьютера".
Параметры командной строки
Если вы не хотите, чтобы приложение немедленно остановилось при запуске или загрузке, используйте CDB или WinDbg вместе с параметром командной строки -g . Дополнительные сведения об этой ситуации см. в статье "Начальная точка останова".
CDB и WinDbg также поддерживают параметр командной строки -G. Этот параметр приводит к концу сеанса отладки, если приложение завершается должным образом.
Следующая команда пытается запустить приложение с начала до конца, и запрос отладчика появляется только в том случае, если возникает ошибка.
cdb -g -G ApplicationName
Чтобы задать время ожидания прерывания, можно использовать параметр командной строки -pt. Существуют определенные проблемы, которые могут сделать целевой объект не в состоянии взаимодействовать с отладчиком. Если команда останова выдана, а отладчик не может врваться в целевой объект после этого времени, отладчик отображает сообщение "Время ожидания останова".
На этом этапе отладчик останавливает попытку взломать целевой объект. Вместо этого отладчик приостанавливает целевой объект и позволяет проверять (но не контролировать) целевое приложение.
Время ожидания по умолчанию — 30 секунд.