Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 调试器主循环_C++_Windows_Exception_Debugging - Fatal编程技术网

C++ 调试器主循环

C++ 调试器主循环,c++,windows,exception,debugging,C++,Windows,Exception,Debugging,我试图在c++/Windows中实现本文中描述的“调试器主循环”: 但是我希望任何抛出的异常都向secreen显示一条错误消息,并被调试器捕获。 我知道我可以通过给DBG_254;的一些值来实现这一点???但我不知道它是什么。 这个值是多少 我还注意到,当向控制台写入某些内容时,控制台应用程序会通知调试器异常。 我如何从这些东西中过滤出实际的异常?它是否与“第一次机会”值有关? 谢谢:)对于调试对象中发生的每个异常,调试器都会收到一个异常事件。 如果将DBG\u CONTINUE传递给Conti

我试图在c++/Windows中实现本文中描述的“调试器主循环”:

但是我希望任何抛出的异常都向secreen显示一条错误消息,并被调试器捕获。 我知道我可以通过给DBG_254;的一些值来实现这一点???但我不知道它是什么。
这个值是多少

我还注意到,当向控制台写入某些内容时,控制台应用程序会通知调试器异常。 我如何从这些东西中过滤出实际的异常?它是否与“第一次机会”值有关?

谢谢:)

对于调试对象中发生的每个异常,调试器都会收到一个异常事件。 如果将
DBG\u CONTINUE
传递给
ContinueDebugEvent
,调试器将接受异常并继续执行,就好像一开始没有发生异常一样。这意味着调试对象也不会收到通知。 另一方面,如果您通过了
DBG\u异常\u未处理
,则会通知调试对象并负责处理异常

现在,如果调试对象不处理(读取:捕获)异常,则会再次通知调试器,这次将
Event.u.exception.dwFirstChance
设置为0。此时,如果您通过
DBG\u exception\u NOT\u HANDLED
,异常将终止进程

要记住两件事:

  • 将字符串传递给调试器的正常方式是
    OutputDebugString
    。不需要使用自定义异常,除非需要传递字符串以外的内容
  • 如果您确实计划抛出自己的异常以将某些事件传递给调试器,请检查
    Event.u.exception.ExceptionRecord.ExceptionCode
    ,查看它是否与预定义的异常类型匹配,并在这种情况下使用
    DBG\u CONTINUE

我不明白你的问题。您的应用程序是调试器,因此您必须显示错误消息。让我们这样说:如果我调试的应用程序将一个数字除以0,我希望它崩溃!:)将未处理的DBG_异常传递给ContinuedBugEvent;这告诉系统让进程继续其正常的异常处理机制(例如,调试器没有处理异常)。如果是第二次机会异常,则系统将终止进程。确定,但即使进程发送通知,进程也会终止,因为某些内容已打印到屏幕上。tere是一种过滤致命异常的方法吗。显然文件不正确;您需要为输出调试字符串事件传递DBG\u CONTINUE。