2011-05-03 55 views
2

我想在C++/Windows中的「調試主循環」這篇文章中描述來實現:Writing the Debugger's Main Loop調試器主循環

但我想任何拋出的異常顯示錯誤消息給secreen和被抓調試器。 我知道我可以通過給ContinueDebugEvent DBG _的一些值來做到這一點。但我不知道它是什麼。
這是什麼值?

我還注意到,控制檯應用程序在寫入控制檯時會通知調試程序異常。 如何從這些東西過濾實際異常?它與「第一次機會」價值有什麼關係?
謝謝:)

+0

我不明白你的問題。你的應用程序是調試器,所以你必須顯示錯誤信息。 – Luke 2011-05-03 15:21:55

+0

讓我們這樣說吧:如果我調試的應用程序將數字除以0,我希望它崩潰! :) – Idov 2011-05-03 19:42:46

+0

將DBG_EXCEPTION_NOT_HANDLED傳遞給ContinueDebugEvent;它告訴系統讓進程繼續其正常的異常處理機制(例如,你的調試器沒有處理異常)。如果是第二次偶然異常,那麼系統將終止該過程。 – Luke 2011-05-04 02:55:05

回答

4

調試器接收到一個異常事件,發生在調試對象中發生的每個異常。 如果您通過DBG_CONTINUEContinueDebugEvent,調試器會吞服該異常,並繼續執行,就好像沒有發生異常。這意味着調試對象也不會被通知。 另一方面,如果您通過DBG_EXCEPTION_NOT_HANDLED,調試對象會收到通知並負責處理異常。

現在,如果調試不手柄(讀:捕獲)異常,調試器被通知的第二次,這次Event.u.Exception.dwFirstChance設置爲0。此時如果傳遞異常將終止該進程DBG_EXCEPTION_NOT_HANDLED

兩件事情要記住:

  • 調試器是OutputDebugString通信的串的正常方式。除非需要傳遞字符串之外的其他內容,否則不需要使用自定義的異常。
  • 如果您計劃拋出自己的異常以將某些事件傳遞給調試器,請檢查Event.u.Exception.ExceptionRecord.ExceptionCode並查看它是否與您的預定義異常類型匹配,並在該情況下使用DBG_CONTINUE