中斷進入偵錯工具
使用者模式和核心模式程式碼會使用不同的常式來中斷偵錯工具。
User-Mode中斷常式
中斷常式會導致目前進程發生例外狀況,讓呼叫執行緒可以發出與呼叫進程相關聯的偵錯工具訊號。
若要從使用者模式程式中斷偵錯工具,請使用 DebugBreak 函式。 其原型如下所示:
VOID DebugBreak(VOID);
當使用者模式程式呼叫 DebugBreak時,會發生下列可能的動作:
如果附加使用者模式偵錯工具,程式會中斷偵錯工具。 這表示程式將會暫停,而偵錯工具將會變成作用中。
如果未附加使用者模式偵錯工具,但在開機時已啟用核心模式偵錯,則整個電腦都會中斷核心偵錯工具。 如果未附加核心偵錯工具,電腦將會凍結並等候核心偵錯工具。
如果未附加使用者模式偵錯工具,且未啟用核心模式偵錯,程式將會以未處理的例外狀況終止,且後續程式 (即時) 偵錯工具啟動。 如需詳細資訊,請參閱 啟用事後偵錯。
Kernel-Mode中斷常式
當核心模式程式中斷至偵錯工具時,整個作業系統會凍結,直到核心偵錯工具允許繼續執行為止。 如果沒有核心偵錯工具存在,則會將它視為錯誤檢查。
DbgBreakPoint常式可在核心模式程式碼中運作,但與其他DebugBreak使用者模式常式類似。
DbgBreakPointWithStatus常式也會造成中斷,但它也會額外將 32 位狀態碼傳送給偵錯工具。
在核取的組建環境中編譯時,KdBreakPoint 和 KdBreakPointWithStatus常式與DbgBreakPointWithStatus相同。 在免費組建環境中編譯時,它們不會有任何作用。
Kernel-Mode條件式中斷常式
有兩個條件式中斷常式可用於核心模式程式碼。 這些常式會測試邏輯運算式。 如果運算式為 false,則執行會停止,且偵錯工具會變成作用中。
ASSERT宏會測試邏輯運算式。 如果運算式為 false,則執行會停止,且偵錯工具會變成作用中。 失敗的運算式及其在程式中的位置會顯示在偵錯工具中。
ASSERTMSG宏與ASSERT相同,不同之處在于它允許傳送額外的訊息給偵錯工具。
ASSERT 和 ASSERTMSG 只有在核取的組建環境中編譯時才會作用中。 在免費組建環境中編譯時,它們不會有任何作用。