使用 KDbgCtrl

KDbgCtrl (核心偵錯控件, kdbgctrl.exe) 工具可用來控制目標電腦的核心偵錯連線。

若要使用此工具,您的目標計算機必須執行 Windows Server 2003 或更新版本的 Windows。

KDbgCtrl 可以控制五個不同的設定:完整核心偵錯、自動核心偵錯、使用者模式錯誤處理、內核偵錯封鎖,以及 DbgPrint 緩衝區的大小。

若要使用 KDbgCtrl,您必須已在上次開機前於目標電腦的開機設定中啟用核心偵錯。 如果未完成,KDbgCtrl 就無法用來啟用核心偵錯。 如需這些開機設定的詳細資訊,請參閱 開機參數以啟用偵 錯。

完整核心偵錯

啟用完整核心偵錯時,在主計算機上執行的核心調試程式可能會闖入目標計算機。 如果叫用內核模式例外狀況,目標計算機將會進入核心調試程式。 也允許從目標到主機的訊息,例如 DbgPrint 輸出、符號載入訊息和重新導向的使用者模式調試程式。

如果停用此設定,目標將會忽略主計算機的所有訊號。

默認會啟用完整核心偵錯。 若要檢查目前的設定值,請使用 kdbgctrl -c。 若要停用此設定,請使用 kdbgctrl -d。 若要啟用此設定,請使用 kdbgctrl -e

如果您想要檢查目前的設定,並使用它來控制批處理檔中的執行,您可以使用 kdbgctrl -cx 命令。 如需此命令的詳細資訊,請參閱 KDbgCtrl 命令行選項

自動核心偵錯

如果已啟用完整核心偵錯,則自動核心偵錯的目前設定並不重要-允許所有通訊。

停用完整核心偵錯並啟用自動核心偵錯時,只有目標計算機可以起始偵錯連線。

在此情況下,只有內核模式例外狀況、斷點或其他內核模式事件會導致建立連線。 不會針對 DbgPrint 輸出、符號載入訊息、重新導向的使用者模式調試程式輸入和輸出,或其他類似的訊息建立連線-這些訊息會儲存在 DbgPrint 緩衝區中,而不是傳送至核心調試程式。

如果例外狀況或事件導致目標中斷至核心調試程式,則系統會自動開啟完整核心偵錯,就像您已執行 kdbgctrl -e 一樣。

默認會停用自動核心偵錯(雖然除非停用完整核心偵錯,否則這是非物質的)。 若要檢查目前的設定值,請使用 kdbgctrl -ca。 若要停用此設定,請使用 kdbgctrl -da。 若要啟用此設定,請使用 kdbgctrl -ea

使用者模式錯誤處理

啟用使用者模式錯誤處理時,某些使用者模式事件會導致目標計算機進入核心調試程式。

具體而言,所有 int 3 中斷 -- 例如調試程式插入程式代碼中的斷點或對 DbgBreakPoint呼叫 -- 都會造成核心調試程式的中斷。 不過,標準例外狀況 -- 例如存取違規和零除 -- 通常不會傳送至核心調試程式。

如果使用者模式調試程式已經附加至進程,這個調試程式將會擷取所有使用者模式錯誤,而且不會改變核心調試程式。 如需各種使用者模式錯誤處理程式的優先順序排名,請參閱 啟用事後偵錯。

若要讓使用者模式錯誤處理正常運作,也必須啟用完整核心偵錯或自動核心偵錯。

預設會啟用使用者模式錯誤處理。 若要檢查目前的設定值,請使用 kdbgctrl -cu。 若要停用此設定,請使用 kdbgctrl -du。 若要啟用此設定,請使用 kdbgctrl -eu

封鎖核心偵錯

在某些情況下,您可能想要設定目標計算機進行核心偵錯,但等到目標計算機啟動之後,才啟用核心偵錯。 您可以封鎖核心偵錯來執行此動作。

重要

使用 BCDEdit 變更開機資訊之前,您可能需要暫時暫停測試電腦上的 Windows 安全性功能,例如 BitLocker 和安全開機。 在測試完成時重新啟用這些安全性功能,並在停用安全性功能時適當地管理測試計算機。

若要封鎖核心偵錯,請使用類似下列命令來設定目標計算機:

bcdedit /debug on
bcdedit /dbgsettings 1394 channel:32 /start DISABLE /noumex

當您重新啟動目標計算機時,將會準備進行核心偵錯,但會停用核心偵錯和使用者模式錯誤處理。 此時,主計算機將無法附加至目標計算機、核心調試程式不會攔截錯誤檢查,而且使用者模式例外狀況不會造成核心調試程式的中斷。

當您準備好時,您可以輸入下列命令來啟用核心偵錯(而不重新啟動目標計算機)。

kdbgctrl -db
kdbgctrl -e

稍後,您可以輸入下列命令來停用核心偵錯。

kdbgctrl -d
kdbgctrl -eb

您可以使用 kdbgctrl -cb 來檢查是否已封鎖核心偵錯。

DbgPrint 緩衝區大小

DbgPrint 緩衝區會儲存目標電腦已傳送給核心調試程式的訊息。

如果已啟用完整核心偵錯,這些訊息會自動出現在核心調試程式中。 但是,如果此選項已停用,這些訊息將會儲存在緩衝區中。 在稍後的時間點,您可以啟用核心偵錯、連線到核心調試程式,以及使用 !dbgprint 擴充功能來查看此緩衝區的內容。 如需此緩衝區的詳細資訊,請參閱 DbgPrint 緩衝區。

在免費的 Windows 組建上,DbgPrint 緩衝區的預設大小為 4 KB。 若要判斷目前的緩衝區大小,請使用 kdbgctrl -cdb。 若要變更緩衝區大小,請使用 kdbgctrl -sdbSize,其中 Size 會指定新的緩衝區大小。 如需語法詳細數據,請參閱 KDbgCtrl 命令行選項

例子

若要顯示所有目前的設定,請使用下列命令:

kdbgctrl -c -ca -cu -cb -cdb 

若要還原預設設定,請使用下列命令:

kdbgctrl -e -da -eu -db -sdb 0x1000 

若要鎖定主計算機,使其只在例外狀況上連絡,請使用下列命令:

kdbgctrl -d -ea -eu 

若要停用所有核心偵錯,請使用下列命令:

kdbgctrl -d -da 

如果您要停用所有核心偵錯,您可能也想要增加 DbgPrint 緩衝區的大小。 這可確保所有訊息都會儲存,以防稍後需要看到這些訊息。 如果您有數 MB 的記憶體要備援,您可以使用下列命令:

kdbgctrl -sdb 0x100000