您可以同時偵錯多個傾印檔案或即時使用者模式應用程式。 每個目標都包含一或多個進程,而每個進程都包含一或多個線程。
這些目標也會分組到 系統中。 系統是一組目標,這些目標會分組在一起,以便輕鬆識別和操作。 系統的定義如下:
每個內核模式或使用者模式傾印檔案都是個別的系統。
當您在不同的計算機上偵錯即時使用者模式應用程式時(使用 進程伺服器,例如 Dbgsrv),每個應用程式都是個別的系統。
當您在本機電腦上偵錯即時使用者模式應用程式時,應用程式會合併成單一系統。
目前或活躍系統是您目前正在偵錯的系統。
取得多個目標
第一個目標是以通常的方法取得。
您可以使用 .attach(附加至進程) 或 .create (Create Process) 命令,後面接著 g (Go) 命令,對其他實時使用者模式應用程式進行偵錯。
您可以使用 .opendump(Open Dump File) 命令來偵錯/除錯其他傾印檔案,接著使用 g(Go) 命令。 您也可以在調試程式啟動時開啟多個傾印檔案。 若要開啟多個傾印檔案,請在命令中包含多個 -z 切換開關,後面接著不同的檔名。
即使進程位於不同的系統上,您也可以使用上述命令。 您必須在每個系統上啟動進程伺服器,然後使用 -premote 參數搭配 .attach 或 .create 來識別適當的進程伺服器。 如果您再次使用 .attach 或 .create 命令而不指定 -premote 參數,調試程式會附加至或建立目前系統上的進程。
操控系統和目標
偵錯開始時,目前的系統就是調試程式最近附加的系統。 如果發生例外狀況,則目前的系統會切換至發生此例外狀況的系統。
若要關閉一個目標並繼續偵錯其他目標,請使用 .kill (Kill Process) 命令。 您可以使用 .detach(從進程卸離) 命令或 WinDbg 的 偵錯 | 卸離偵錯目標 功能表命令。 這些命令會將調試程式與目標中斷連結,但讓目標保持執行狀態。
若要控制多個系統的偵錯,您可以使用下列方法:
||(系統狀態)命令會顯示一或多個系統的相關信息
||s (設定目前的系統) 命令可讓您選取目前的系統
(僅限 WinDbg)處理程序和執行緒視窗可讓您顯示或選取系統、處理程序和執行緒。
藉由使用這些命令來選取目前的系統,並使用標準命令 來選取目前的進程和線程,您可以判斷顯示記憶體和緩存器之命令的內容。
不過,您無法分隔這些進程的執行。 g (Go) 命令一律會導致所有目標一起執行。
注意 當您同時偵錯即時目標和傾印目標時,會有一些複雜性,因為命令針對每種偵錯類型的運作方式不同。 例如,如果您在目前的系統是傾印檔案時使用 g (Go) 命令,調試程式就會開始執行,但您無法中斷回調試程式,因為中斷命令無法辨識為對傾印檔案偵錯有效。
範例
若要同時處理三個傾印檔案,您可以使用 -z 選項,在 WinDbg 啟動時載入它們。
windbg -z c:\notepad.dmp -z c:\paint.dmp -z c:\calc.dmp
如需詳細資訊,請參閱 WinDbg Command-Line 選項。 您也可以使用 .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
資源
如需偵錯的其他資訊,請參閱下列資源。
書籍
Mario Hewardt 和 Daniel Pravat 的進階 Windows 偵錯
深入了解 Windows 偵錯:Tarik Soulami 關於 Windows 偵錯與追蹤策略的實用指南
帕維爾·約西夫維奇、亞歷克斯·伊內斯庫、馬克·魯西諾維奇和大衛·所羅門著《Windows 內部》
影片
"Defrag Tools" 節目 WinDbg 集數 13-29: </shows/defrag-tools/>