偵錯多個目標
您可以同時偵錯多個傾印檔案或即時使用者模式應用程式。 每個目標都包含一或多個進程,而每個進程都包含一或多個線程。
這些目標也會分組到 系統中。 系統是一組目標,這些目標會分組在一起,以便輕鬆識別和操作。 系統的定義如下:
每個內核模式或使用者模式傾印檔案都是個別的系統。
當您在不同的計算機上偵錯即時使用者模式應用程式時(使用 進程伺服器,例如 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 命令行選項。 您也可以使用 .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 內部
影片
重組工具顯示 WinDbg 情節 13-29: </show/defrag-tools/>