本文說明如何利用 WinDbg 及其他除錯工具開始使用 Windows 除錯。 您將學習如何:
- 安裝偵錯工具並設定主機和目標系統
- 設定您的偵錯環境
- 掌握核心模式和使用者模式案例的基本偵錯技術
備註
如果你想分析當機傾印,請參考「從傾印檔案中擷取資訊」。
要開始使用 Windows 除錯,請完成以下步驟。
1. 安裝 Windows 除錯器
安裝 WinDbg 開始除錯 Windows 應用程式和驅動程式。 如需詳細的安裝步驟,請參閱 安裝 WinDbg。
2.識別主機和目標系統
通常你會使用兩套獨立的電腦系統來除錯,因為這個程序通常會暫停處理器上的指令執行。 調試程式會在 主機 系統上執行,而您想要偵錯的程式代碼會在 目標 系統上執行。
主機 <--------------------------------------------------> 目標
在某些情況下,你可以用虛擬機作為第二系統。 例如,虛擬電腦可以在你需要除錯的程式碼同一台電腦上執行。 不過,如果您的程式代碼與低階硬體通訊,使用虛擬計算機可能不是最佳方法。 如需詳細資訊,請參閱 設定虛擬機的網路偵錯 - KDNET。
3.判斷調試程式類型:內核模式或使用者模式
接著,決定使用核心模式還是使用者模式除錯。
作業系統和特殊權限程式會在 核心模式中執行,。 內核模式程式碼具有存取系統任何部分的許可權,而且不像使用者模式程式碼那樣受限制。 核心模式程式代碼可以存取以使用者模式或核心模式執行的任何其他進程的任何部分。 大部分的核心OS功能和許多硬體設備驅動器都會以核心模式執行。
電腦上的應用程式和子系統會在 使用者模式中執行,。 在使用者模式中執行的進程會在自己的虛擬位址空間內執行。 它們受限於直接存取系統的許多部分,包括系統硬體、未配置供其使用的記憶體,以及可能會危害系統完整性的系統其他部分。 在使用者模式中執行的進程會有效地與系統與其他使用者模式進程隔離,因此它們不會干擾這些資源。
如果您的目標是偵錯驅動程式,請判斷驅動程式是否為內核模式驅動程式或使用者模式驅動程式。 Windows 驅動程式模型(WDM)驅動程式與 Kernel-Mode 驅動框架(KMDF)皆為核心模式驅動程式。 如其名所示,User-Mode Driver Framework (UMDF) 驅動程式是使用者模式驅動程式。
在某些情況下,很難判斷程式代碼執行所在的模式。 在此情況下,您可能需要挑選一個模式,並查看該模式中可用的資訊。 有些問題需要在使用者模式和核心模式中使用調試程式。
根據您偵錯的模式,您可能需要以不同方式設定及使用調試程式。 有些偵錯命令在兩種模式中都運作相同,有些命令的運作方式不同。
核心模式偵錯的後續步驟
- 開始使用 WinDbg (核心模式) - 完成設定和第一個偵錯會話
- 偵錯通用驅動程式:逐步實驗室 (回應核心模式) - 使用回應驅動程式的實作實驗室
- 除錯驅動程式:逐步教學實驗(Sysvad 核心模式) - 音訊驅動程式實作的動手實驗室
使用者模式偵錯的後續步驟
- 開始使用 WinDbg (使用者模式) - 完成設定和第一個偵錯會話
4.選擇調試程序環境
WinDbg 除錯器在大多數情況下運作良好,但有時你可能會想用其他除錯器,例如自動化的主控台除錯器或 Visual Studio。 如需詳細資訊,請參閱
5.決定如何連線目標與主機
一般而言,您可以使用乙太網路來連接目標及主機系統。 如果您正在進行初始設置工作,或裝置上沒有乙太網路連線,則可以使用其他的網路連接方式。 如需詳細資訊,請參閱下列文章:
6.選擇 32 位或 64 位偵錯工具
你是否需要 32 位元或 64 位元除錯器,取決於目標和主機系統上運行的 Windows 版本,以及你除錯的是 32 位元還是 64 位元程式碼。 如需詳細資訊,請參閱 選擇 32 位或 64 位偵錯工具。
7.設定符號
若要使用 WinDbg 提供的所有進階功能,您必須載入適當的符號。 如果您未正確設定符號,當您嘗試使用相依於符號的功能時,您會收到訊息,指出符號無法使用。 欲了解更多資訊,請參見 Symbols for Windows debugging。
8.設定原始程式碼
如果您的目標是偵錯您自己的原始程式碼,您必須設定原始碼的路徑。 如需詳細資訊,請參閱 來源路徑。
9.熟悉除錯操作
文件的 調試程式作業 一節說明各種工作的調試程序。 例如,在 WinDbg 中保留記錄檔 說明 WinDbg 如何寫入記錄檔來記錄偵錯會話。
10.熟悉偵錯技術
標準偵錯技術 套用至大部分的偵錯案例,範例包括設定斷點、檢查呼叫堆棧,以及尋找記憶體流失。 特製化偵錯技術 適用於特定技術或程式代碼類型。 範例包括 隨插即用 除錯、KMDF 除錯及 RPC 除錯。
11.使用調試程序參考命令
在除錯器裡工作時,使用不同的除錯指令。 若要在偵錯時取得任何命令的說明,請使用.hh命令緊接著命令名稱。
範例:
.hh bp # Get help on breakpoint commands
.hh k # Get help on call stack commands
如需可用命令的完整清單,請參閱 偵錯工具參考。
12.針對特定技術使用偵錯延伸模組
使用多個除錯擴充來解析領域特定的資料結構。 如需詳細資訊,請參閱 特製化延伸模組。 如需如何載入偵錯工具延伸模組的資訊,請參閱 載入偵錯工具延伸模組 DLL。
13. 了解相關的 Windows 內部結構
這份文件假設你對 Windows 核心系統有一定了解。 欲深入了解Windows內部,包括記憶體使用、上下文、執行緒與程序,請參閱 Pavel Yosifovich、Mark E. Russinovich、David A. Solomon 與 Alex Ionescu 合著的 Windows Internals 等資源。
14.檢閱其他偵錯資源
其他資源包括下列書籍和影片:
- 《Windows除錯內幕:實用除錯與追蹤策略作者:Tarik Soulami
- Advanced Windows Debugging作者:Mario Hewardt 和 Daniel Pravat
- 磁碟重組工具 影片系列,第 13 到 29 集,全都關於 WinDbg
後續步驟
選擇您的偵錯模式以繼續:
核心模式偵錯 (適用於驅動程式和 OS 元件):
使用者模式偵錯 (適用於應用程式):
其他設定指引: