Поделиться через


Отладка нескольких целевых объектов

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

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

  • Каждый файл дампа в режиме ядра или в пользовательском режиме является отдельной системой.

  • При отладке динамических приложений в режиме пользователя на разных компьютерах (с помощью сервера обработки, например Dbgsrv), каждое приложение является отдельной системой.

  • При отладке динамических приложений в режиме пользователя на локальном компьютере приложения объединяются в одну систему.

Текущая или активная система — это система, которую вы сейчас отлаживаете.

Получение нескольких целевых объектов

Первый целевой объект приобретается обычным образом.

Вы можете выполнять отладку дополнительных динамических приложений в режиме пользователя с помощью команды .attach (Attach to Process) или CREATE (Create Process), а затем команды g (Go).

Вы можете отлаживать дополнительные файлы дампа с помощью команды opendump (Open Dump File)и команды g (Go). При запуске отладчика можно также открыть несколько файлов дампа. Чтобы открыть несколько файлов дампа, включите несколько коммутаторов -z в команду, за каждым из которых следует другое имя файла.

Предыдущие команды можно использовать, даже если процессы находятся в разных системах. Необходимо запустить сервер обработки в каждой системе, а затем использовать параметр -premote с .attach или .create , чтобы определить соответствующий сервер обработки. Если вы снова используете команду .attach или .create , не указывая параметр -premote, отладчик присоединяется или создает процесс в текущей системе.

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

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

Чтобы закрыть один целевой объект и продолжить отладку других целевых объектов, используйте команду kill (Kill Process). Вы можете использовать команду .detach (Отсоединение от процесса) или команду меню Отладка | Отсоединить отлаживаемое приложение в WinDbg. Эти команды отсоединяют отладчик от целевого объекта, но оставьте целевой объект запущенным.

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

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

Однако вы не можете разделить выполнение этих процессов. Команда g (Go) всегда приводит к тому, чтобы все целевые объекты выполнялись вместе.

Заметка При отладке динамических целевых объектов и целевых объектов дампа возникают сложности, так как команды ведут себя по-разному для каждого типа отладки. Например, если вы используете команду g (Go), когда текущая система является файлом дампа, отладчик начинает выполняться, но вы не можете вернуться к отладчику, так как команда останова не распознается как допустимая для отладки файла дампа.

Пример

Для работы с тремя файлами дампа одновременно можно использовать параметр -z для их загрузки при запуске WinDbg.

windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp

Дополнительные сведения см. в разделе "Параметры" Command-Line WinDbg. Вы также можете использовать команды opendump и g (Go) для загрузки дополнительных файлов дампа в отладчик.

Используйте команду || (Состояние системы), чтобы убедиться, что присутствуют все три системы.

||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   1 User mini dump: C:\paint.dmp
   2 User mini dump: c:\calc.dmp

Используйте команду g (Go), чтобы завершить загрузку файлов дампа.

||0:0:007> g

************* Path validation summary **************
Response                         Time (ms)     Location
Deferred                                       srv*
Symbol search path is: srv*
Executable search path is: 
Windows 10 Version 15063 MP (4 procs) Free x64
Product: WinNt, suite: SingleUserTS
15063.0.amd64fre.rs2_release.170317-1834
Machine Name:
Debug session time: Fri Jun  9 15:52:04.000 2017 (UTC - 7:00)
System Uptime: not available
Process Uptime: 0 days 0:03:44.000
...............................................................
This dump file has a breakpoint exception stored in it.
The stored exception information can be accessed via .ecxr.
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3

Затем используйте команду ||s (Задать текущую систему), чтобы установить текущую систему как систему 1, а затем отобразить текущую систему.

||1:1:017> ||1s
||1:1:017> ||
   0 User mini dump: c:\notepad.dmp
.  1 User mini dump: c:\paint.dmp
   2 User mini dump: c:\calc.dmp

Команду .detach можно использовать после завершения просмотра текущего файла дампа.

||1:1:017> .detach
ntdll!DbgBreakPoint:
00007ff8`aada8d70 cc              int     3
Detached
||0:0:007> ||
.  0 User mini dump: c:\notepad.dmp
   2 User mini dump: c:\calc.dmp

Ресурсы

Дополнительные сведения об отладке см. в следующих ресурсах.

Книги

  • Расширенная отладка Windows от Марио Хьюардта и Даниэля Правата

  • Внутри отладки Windows: практическое руководство по стратегиям отладки и трассировки в Windows от Тарик Сулами

  • Windows Internals под редакцией Павла Йосифовича, Алекса Ионеску, Марка Э. Руссиновича и Дэвида А. Соломона.

Видео

Шоу Defrag Tools, показы WinDbg, эпизоды 13-29: </shows/defrag-tools/>