結合此方法與遠端偵錯
有時候,從核心調試程式
重要
使用遠端偵錯時,還有其他重要的安全性考慮,如需詳細資訊,包括啟用安全模式的資訊,請參閱遠端偵錯期間的安全性 和 windows 偵錯工具 安全性考慮。
例如,當您的使用者模式符號位於符號伺服器上時,此設定很有用。 在從核心調試程式控制使用者模式調試程式的標準組態中,這兩個調試程式的互動可能會導致同步處理時發生微小的失誤,而且這些失誤可以防止符號伺服器驗證。 這裡所述的更複雜的組態可以避免這個問題。
注意 在描述此案例時,目標應用程式 是指正在偵錯的使用者模式應用程式,目標計算機 是指包含目標應用程式和 CDB 或 NTSD 進程的計算機,主計算機 參照包含核心調試程式的計算機。
若要使用這項技術,您必須執行下列動作:
使用 -ddefer 和 -server 命令行選項,在目標計算機上啟動 NTSD 或 CDB,並指定所需的傳輸選項。 -server 選項必須是命令行上的第一個參數。
例如,您可以使用下列語法連接到正在執行的程序。
ntsd -server ServerTransport -ddefer [-y UserSymbolPath] -p PID
或者,您可以使用下列語法來啟動新的程序作為目標。
ntsd -server ServerTransport -ddefer [-y UserSymbolPath] ApplicationName
如果您要將此安裝為驗屍調試程式,您可以使用下列語法。 請注意,您必須手動編輯登錄,以安裝包含 -server 參數的驗屍調試程式;如需詳細資訊,請參閱 啟用事後偵錯。
ntsd -server ServerTransport -ddefer [-y UserSymbolPath]
如需可用傳輸選項的相關資訊,請參閱 啟用偵錯伺服器。
在主計算機上啟動 WinDbg 或 KD,就像您要偵錯目標電腦一樣,但實際上不會中斷目標計算機。 若要使用 WinDbg,請使用下列語法。
windbg [-y KernelSymbolPath] [-k ConnectionOptions]
如需此步驟的詳細資訊,請參閱 使用 WinDbg(傳統) 進行 Kernel-Mode 即時偵錯
.
以偵錯用戶端的形式啟動 WinDbg 或 CDB,其傳輸選項與用來啟動伺服器的傳輸選項相同。 此偵錯用戶端可以在主電腦或第三部計算機上執行。
cdb -remote ClientTransport
如需此步驟的詳細資訊,請參閱 啟用偵錯用戶端。
調試程式執行且
Input>
提示出現在核心調試程式中之後,請使用 .sleep (暫停調試程式) 命令來暫停調試程式,並讓目標電腦執行幾秒鐘。 這可讓目標電腦有時間處理遠端傳輸通訊協定,並建立使用者模式遠端伺服器與遠端用戶端之間的連線。
如果您使用CDB做為使用者模式調試程式,與CDB相關聯的 [命令提示字元] 視窗會在偵錯繼續時保持鎖定且無法使用。 如果您使用 NTSD,即使 NTSD 在目標電腦上有與其相關聯的程序識別碼,也不會建立其他視窗。
切換模式主題中所述的四種模式和切換方法, 適用於此組合案例,但有下列差異:
有兩種不同的使用者模式偵錯模式。 當目標電腦執行時,偵錯伺服器由偵錯客戶端所控制,與任何其他的遠端偵錯會話相似,這被稱為 遠端控制的使用者模式偵錯。 當核心模式偵錯程式中斷到目標計算機,且出現
Input>
提示時,使用者模式偵錯程式便由核心偵錯程式控制;這被稱為 核心控制的使用者模式偵錯。這兩種模式永遠無法同時使用。 當核心除錯器進入目標電腦時,即使使用者模式除錯器可能運行中,目標電腦仍無法處理遠端傳輸協定,因此使用者模式除錯器將無法透過此連線接收遠端輸入。
如果您的使用者模式符號位於符號伺服器上,則在遠端控制的使用者模式偵錯模式中,應該發出任何需要符號存取的調試程式命令。
若要從內核控制的使用者模式偵錯切換到遠端控制的使用者模式偵錯,請使用 .sleep (暫停調試程式) 命令。 當使用者模式調試程式從睡眠命令喚醒時,它會處於遠端控制的使用者模式偵錯模式。
若要從遠端控制的使用者模式偵錯切換到內核模式偵錯,請從
Input>
提示字元輸入任何命令。 如果看不到此提示,請切換至內核模式偵錯,然後在kd>
提示字元中使用 g (Go) 命令。
在內部,以 -ddefer 啟動的用戶模式除錯器會首先優先接收來自調試客戶端的輸入,其次則為來自核心除錯器的輸入。 不過,因為核心調試程式進行目標電腦時,遠端連線無法連接,所以不會發生兩個輸入同時衝突的情況。