在未处理的C&x2B中转储+;例外 在MSVC中,如何使任何未处理的C++异常(例如:STD::RunTimeOrthError)崩溃我的版本编译程序,以便它从异常抛出位置生成完整堆栈的转储?
我已经在AeDebug注册表中安装了NTSD,可以为内存访问冲突之类的事情生成良好的转储,所以我想这里的问题归结为正确地破坏程序 提前谢谢。而且可能应该完成这项工作在未处理的C&x2B中转储+;例外 在MSVC中,如何使任何未处理的C++异常(例如:STD::RunTimeOrthError)崩溃我的版本编译程序,以便它从异常抛出位置生成完整堆栈的转储?,c++,windows,visual-c++,exception-handling,C++,Windows,Visual C++,Exception Handling,我已经在AeDebug注册表中安装了NTSD,可以为内存访问冲突之类的事情生成良好的转储,所以我想这里的问题归结为正确地破坏程序 提前谢谢。而且可能应该完成这项工作 编辑:OOP,重读,你想处理不加的C++异常。这样做会有点棘手——当你(通常)得到C++异常的时候,它已经解压缩了栈回到处理程序的级别。在调用catch之前,您没有任何真正的方法知道抛出了异常,但此时堆栈已经展开 研究如何使用Windows调试器。 Windbg–用一个体面的用户界面包装KD和NTSD。 还可以查看Windows调试
<>编辑:OOP,重读,你想处理不加的C++异常。这样做会有点棘手——当你(通常)得到C++异常的时候,它已经解压缩了栈回到处理程序的级别。在调用
catch
之前,您没有任何真正的方法知道抛出了异常,但此时堆栈已经展开 研究如何使用Windows调试器。Windbg–用一个体面的用户界面包装KD和NTSD。
还可以查看Windows调试器附带的ADPlus
是一个开始学习如何使用它的好地方。我终于把它破解了
set\u terminate()
函数为每个线程注册一个处理程序SetUnhandledExceptionFilter()
。这里有一篇关于如何做到这一点的好文章:李>
RaiseException()
就足以使进程崩溃并产生我想要的大量转储
正如你所知,我遇到的问题是:
使用调试器是可以的,但这不能在程序运行的无人值守环境中完成。请参阅,这是一个生产环境:如果出现问题,服务将崩溃并重新启动。我真的需要一个崩溃转储,以便稍后进行验尸分析。我还需要有关“由Windows收集的错误报告”的这些信息,稍后我将获得这些信息。Windows调试器附带一个名为ADPlus的实用程序,该实用程序允许我轻松收集发布版本应用程序崩溃的堆栈跟踪。我同意这一点,你应该只在试图追查撞车事故时才这样做,而不是在连续的基础上。为此,您需要一个日志记录系统。检查所有的ADOPLUS命令开关。MSCVRT中的SETIONEATEATE()函数应该能起作用,但是我不能使它工作:我的处理程序(它调用RAISE异常(和)使程序崩溃)永远不会被调用。<代码> StunHundLeXePosivsPosivs/Cuth>对未处理的C++异常也适用于Seh异常。
void Terminate()
{
OutputDebugStringA("Terminate\r\n");
RaiseException(0xE0000010, EXCEPTION_NONCONTINUABLE, 0, 0);
}