开发者

Debugger main loop

I'm trying to implement in c++/Windows the "Debugger Main Loop" described in this article: Writing the Debugger's Main Loop

But I want any thrown exception to display an error message to the secreen and be caught by the debugger. I understood that I can do this by开发者_高级运维 giving ContinueDebugEvent some value of DBG_??? but I don't know what it is.

What is this value?

I also noticed that console applications notify the debugger of exceptions when something is written to the console. How can I filter actual exception from those things? Does it have anything to do with the "first chance" value?

thanks :)


The debugger receives an exception event for every exception that occurs in the debuggee. If you pass DBG_CONTINUE to ContinueDebugEvent, the debugger swallows the exception and execution continues as if no exception happened in the first place. That means that the debuggee is not notified of it either. If on the other hand you pass DBG_EXCEPTION_NOT_HANDLED the debuggee is notified and responsible for handling the exception.

Now, if the debuggee does not handle (read: catch) the exception, the debugger gets notified a second time, this time with Event.u.Exception.dwFirstChance set to 0. At this point the exception would terminate the process if you pass DBG_EXCEPTION_NOT_HANDLED.

Two things to keep in mind:

  • The normal way to communicate a string to the debugger is OutputDebugString. No need to use self-defined exceptions unless you need to pass something other than a string.
  • If you do plan on throwing your own exception to communicate certain events to the debugger, check the Event.u.Exception.ExceptionRecord.ExceptionCode and see if it matches your predefined exception type and use DBG_CONTINUE in that case.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜