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


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

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

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

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

  • При отладке динамических приложений в режиме пользователя на разных компьютерах (с помощью сервера обработки, например 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). Вы можете использовать команду отсоединения (отсоединение от процесса) или отладку WinDbg | Вместо этого отсоединить команду меню отладчика. Эти команды отсоединяют отладчик от целевого объекта, но оставьте целевой объект запущенным.

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

  • | | (Состояние системы) команда отображает сведения об одной или нескольких системах

  • | |Команда s (Set Current System) позволяет выбрать текущую систему.

  • (только WinDbg) Окно "Процессы и потоки" позволяет отображать или выбирать системы, процессы и потоки.

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

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

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

Пример

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

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

Дополнительные сведения см. в разделе "Параметры командной строки 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 Марио Hewardt и Даниэль Прават

  • В отладке Windows: практическое руководство по отладке и трассировке стратегий в Windows от Tarik Soulami

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

Видео

Средства defrag показывают WinDbg Эпизоды 13-29: </show/defrag-tools/>