项目上为了应对程序异常崩溃的情况,加入了DUMP生成机制,也就是调用windows下的API SetUnhandledExceptionFilter()对未处理的异常安装了一个处理函数,在处理函数里面调用MiniDumpWriteDump()生成DUMP文件。这部分代码比较简单,但是在实际测试过程中,发现很多时候程序崩了之后并没有生成DUMP文件。在网上找了一些资料,有用的不多,当然也有很多大神的文档,譬如Matt Pietrek写的关于结构化异常的分析文章(链接:Matt Pietrek 讲解SEH的巨牛文章,留下来慢慢研究 - 认真做人,认真做事 - 博客园),这篇文章很好,里面有些东西不是短时间容易消化的,不过对于理解SEH确实是一份难得的学习资料。
下面是我再本地对异常捕获的一点测试结果。
在VS里面"启用C++异常"选项为"EHsc",并开启了Release编译优化的情况下:
1. try{}...catch{} 可以捕获C++异常(也就是通过throw抛出的异常),捕获不到SEH异常
2.__try{}...__except{} 可以捕获SEH异常,也可以捕获C++异常
如果将"启用C++异常"选项改为"EHa",try{}...catch{}可以捕获到SEH异常

博主分享了在Windows环境下,为应对程序异常崩溃而采用DUMP生成机制的经验。通过调用APISetUnhandledExceptionFilter()和MiniDumpWriteDump(),实现未处理异常的捕获和DUMP文件的生成。然而在实际测试中遇到程序崩溃后无法生成DUMP的问题。文章指出,C++的EHsc模式下,try{}
22万+

被折叠的 条评论
为什么被折叠?



