偵錯多個目標

您可以同時偵錯多個傾印檔案或即時使用者模式應用程式。 每個目標都包含一或多個進程,而每個進程都包含一或多個線程。

這些目標也會分組到 系統中。 系統是一組目標,這些目標會分組在一起,以便輕鬆識別和操作。 系統的定義如下:

  • 每個內核模式或使用者模式傾印檔案都是個別的系統。

  • 當您在不同的計算機上偵錯即時使用者模式應用程式時(使用 進程伺服器,例如 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 的偵 錯 |請改為卸離 [偵 錯] 功能表命令。 這些命令會將調試程式與目標中斷連結,但讓目標保持執行狀態。

若要控制多個系統的偵錯,您可以使用下列方法:

藉由使用這些命令來選取目前的系統,並使用標準命令來 選取目前的進程和線程,您可以判斷顯示記憶體和緩存器之命令的內容。

不過,您無法分隔這些進程的執行。 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/>