Отладка нескольких целевых объектов
Одновременно можно выполнять отладку нескольких файлов дампа или динамических приложений в режиме пользователя. Каждый целевой объект содержит один или несколько процессов, и каждый процесс содержит один или несколько потоков.
Эти целевые объекты также группируются в системы. Системы представляют собой наборы целевых объектов, которые группируются вместе для простой идентификации и манипуляции. Системы определяются следующим образом:
Каждый файл дампа в режиме ядра или в пользовательском режиме является отдельной системой.
При отладке динамических приложений в режиме пользователя на разных компьютерах (с помощью сервера обработки, например 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/>