Управление целевым объектом
При отладке целевого приложения в пользовательском режиме или на целевом компьютере в режиме ядра целевой объект может быть запущен или остановлен.
Когда отладчик подключается к целевому объекту в режиме ядра, отладчик оставляет целевой объект запущенным, если вы не используете параметр командной строки-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 |
Выполнение останавливается, и отладчик врывается в целевой объект. |
Отладка | Перезапустить |
CTRL+SHIFT+F5 |
(Только в пользовательском режиме) Перезапускает целевое приложение. |
|
Отладка | Пойти |
F5 |
Целевой объект выполняется свободно. |
|
Возобновляет выполнение после условной точки останова. |
|||
Отладка | Обработанное исключение Go |
То же, что и g (Go), за исключением того, что текущее исключение обрабатывается как обработанное. |
||
Отладка | Перейти необработанное исключение |
То же, что и g (Go), за исключением того, что текущее исключение обрабатывается как необработанное. |
||
Отладка | Шаг с выходом |
SHIFT+F11 |
Target выполняется до завершения текущей функции. |
|
Отладка | Шаг с обходом |
F10 |
Target выполняет одну инструкцию. Если эта инструкция является вызовом функции, эта функция выполняется как один шаг. |
|
Целевой объект выполняется до достижения указанного адреса. Отображаются все шаги в этой функции (но шаги в вызываемых функциях не являются). |
|||
Target выполняется до следующей инструкции вызова . Если текущая инструкция является инструкцией вызова , этот вызов выполняется полностью и выполнение продолжается до следующего вызова. |
|||
Target выполняется до тех пор, пока не достигнет инструкции вызова или возвращаемой инструкции. |
|||
Целевой объект выполняется до тех пор, пока не достигнет инструкции ветвления любого типа, включая условные или безусловные ветви, вызовы, возвраты и системные вызовы. |
|||
Target выполняется до тех пор, пока не достигнет возвращаемой инструкции. |
|||
Отладка | Шаг с заступом |
F11 F8 |
Target выполняет одну инструкцию. Если эта инструкция является вызовом функции, отладчик выполняет трассировку в этом вызове. |
|
Целевой объект выполняется до тех пор, пока не достигнет указанного адреса. Отображаются все шаги в этой функции и вызываемых функциях. |
|||
(Все режимы, кроме режима ядра, только в системах на базе x86) Целевой объект выполняется до тех пор, пока не достигнет следующей инструкции ветви. |
|||
Target выполняется до следующей инструкции вызова . Если текущая инструкция является инструкцией вызова , она отслеживается до тех пор, пока не будет достигнут новый вызов . |
|||
Целевой объект выполняется до тех пор, пока не достигнет инструкции вызова или возвращаемой инструкции. Если текущая инструкция является инструкцией вызова или инструкцией возврата , инструкция отслеживается до тех пор, пока не будет достигнут новый вызов или возврат . |
|||
Целевой объект выполняется до тех пор, пока не достигнет инструкции ветвления любого типа, включая условные или безусловные ветви, вызовы, возвраты и системные вызовы. Если текущая инструкция является инструкцией ветвления, она отслеживается до тех пор, пока не будет достигнута новая инструкция ветвления. |
|||
Целевой объект выполняется до тех пор, пока не достигнет возвращаемой инструкции. Если текущая инструкция является возвращаемой инструкцией, она отслеживается до достижения нового возвращаемого значения . |
|||
Целевой объект выполняется до завершения всей указанной функции. Затем отобразится статистика. |
Дополнительные сведения о том, как перезагрузить целевой компьютер, см. в разделе Сбой и перезагрузка целевого компьютера.
Параметры командной строки
Если вы не хотите, чтобы приложение немедленно завершалось при запуске или загрузке, используйте CDB или WinDbg вместе с параметром командной строки -g . Дополнительные сведения об этой ситуации см. в разделе Начальная точка останова.
CDB и WinDbg также поддерживают параметр командной строки-G. Этот параметр приводит к завершению сеанса отладки при правильном завершении приложения.
Следующая команда пытается запустить приложение от начала до конца, и запрос отладчика отображается только в случае ошибки.
cdb -g -G ApplicationName
Для задания времени ожидания перерыва можно использовать параметр командной строки-pt. Существуют определенные проблемы, которые могут сделать целевой объект неспособным взаимодействовать с отладчиком. Если команда прерывания выдана и отладчик не может пробиться в целевой объект после этого времени, отладчик отображает сообщение "Время ожидания останова истекло".
На этом этапе отладчик перестает пытаться проникнуть в целевой объект. Вместо этого отладчик приостанавливает целевой объект и позволяет изучить (но не контролировать) целевое приложение.
Время ожидания по умолчанию — 30 секунд.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по