若要正確偵錯使用者模式失敗,您需要 CDB 或 WinDbg。 不過,有時候因為沒有使用者模式偵錯工具存在,使用者模式例外狀況會切入 KD。 在除錯核心模式問題時,監控特定使用者模式進程正在執行的操作也很有幫助。
根據預設,核心調試程式會嘗試載入符合指定位址的第一個使用者模式符號(k、u或 ln 命令)。
不幸的是,使用者模式符號通常不會在符號路徑中指定,或第一個符號不是正確的符號。 如果符號不存在,請將符號複製到符號路徑,或使用 .sympath (設定符號路徑) 命令指向完整的符號樹狀結構,然後使用 .reload (Reload Module) 命令。 如果載入了錯誤的符號,您可以執行 .reload <binary.ext>,明確地載入符號。
大部分的 Windows DLL 都會重新設定基底,使其在不同的位址載入,但有例外狀況。 視訊配接器是最常見的例外狀況。 有數十個視訊配接器全都以相同的基位址載入,因此 KD 幾乎一律會找到 ati.dll(第一個視訊符號,依字母順序排列)。 針對視訊,還有載入 .sys 檔案,可使用 lm 命令來識別。 利用此資訊,您可以發出 .reload,以取得正確的視訊 DLL。 有時候偵錯工具會混淆,這時重新載入特定符號有助於提供正確的堆疊。 取消組譯函式,以查看符號是否看起來正確。
與影片 DLL 類似,幾乎所有可執行文件都會以相同的位址載入,因此 KD 會報告存取權。 如果您在存取時看到堆疊追蹤,請執行 !process,然後對指定的可執行檔名稱執行 .reload。 如果可執行檔在符號路徑中沒有符號,請將其複製到該處,然後再次執行 .reload。
有時候,即使完整符號樹狀結構位於符號路徑中,KD 或 WinDbg 仍無法載入正確的使用者模式符號。 在此情況下,ntdll.dll 和 kernel32.dll 是兩個最常見的符號,這是必要的。 在從 KD 偵錯 CSRSS 的情況下,winsrv.dll 和 csrsrv.dll 也是常見的 DLL 檔案要載入。