2011-05-03 70 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