调试器主循环

时间:2011-05-03 13:37:59

标签: c++ windows exception debugging

我正在尝试在c ++ / Windows中实现本文中描述的“调试器主循环”:Writing the Debugger's Main Loop

但是我希望任何抛出的异常向secreen显示一条错误消息并被调试器捕获。 我明白我可以通过给ContinueDebugEvent一些DBG值来做到这一点_ ???但我不知道它是什么。
这个值是什么?

我还注意到控制台应用程序在向控制台写入内容时会通知调试器异常。 如何从这些内容中过滤实际异常?它与“第一次机会”值有什么关系吗? 谢谢:))

1 个答案:

答案 0 :(得分:4)

调试器收到调试对象中发生的每个异常的异常事件。 如果将DBG_CONTINUE传递给ContinueDebugEvent,调试器会吞下异常并继续执行,就好像首先没有发生异常一样。这意味着调试对象也不会收到通知。 另一方面,如果您传递DBG_EXCEPTION_NOT_HANDLED,则调试对象会收到通知并负责处理异常。

现在,如果调试对象执行处理(读取:catch)异常,则调试器会第二次收到通知,这次将Event.u.Exception.dwFirstChance设置为0。此时如果您通过DBG_EXCEPTION_NOT_HANDLED,则异常将终止该过程。

要记住两件事:

  • 将字符串传递给调试器的常规方法是OutputDebugString。除非您需要传递字符串以外的其他内容,否则无需使用自定义的异常。
  • 如果您计划抛出自己的异常以将某些事件传达给调试器,请检查Event.u.Exception.ExceptionRecord.ExceptionCode并查看它是否与预定义的异常类型匹配,并在这种情况下使用DBG_CONTINUE