自动创建Visual C ++崩溃转储

时间:2012-09-01 13:47:42

标签: visual-studio visual-c++ crash

有没有办法在应用程序崩溃时自动创建崩溃转储文件(在Windows操作系统上),就像我可以附加Visual Studio调试器一样保存?也就是说,我希望能够使用自动创建的故障转储文件在Visual Studio中调试我的应用程序。

2 个答案:

答案 0 :(得分:4)

更新: Debug Diag 2.0现已推出。此版本具有对.NET转储的本机支持。

是的,可以使用DebugDiag 1.2

  

调试诊断工具(DebugDiag)旨在帮助   解决诸如挂起,性能降低,内存泄漏等问题   或碎片,并在任何用户模式进程中崩溃。工具   包括专注于Internet信息的其他调试脚本   服务(IIS)应用程序,Web数据访问组件,COM +和   相关的微软技术。

它甚至允许您在转储上运行崩溃/挂起分析,并为您提供有关处于睡眠状态的callstack和线程的好报告(用于挂起转储)。它还允许您承担飞行转储。 DebugDiag采用的转储可以在DebugDiag,Visual Studio和WinDbg中进行分析。

编辑:有关如何使用DebugDiag的MSDN链接是here

答案 1 :(得分:1)

使用SetUnhandledExceptionFilter来捕获异常。在此全局异常处理程序中,使用MiniDumpWriteDump函数创建转储文件。

这种方式有很多异常处理,就像你将无法捕获所有异常(STL异常,纯虚函数,abort C运行时调用等)。此外,如果多个线程导致某些异常,您可能会遇到问题。当您在全局异常处理程序中获得异常时,您需要暂停所有其他正在运行的线程,或者使用某些逻辑,以便其他线程不会干扰您的转储生成代码。

要处理所有情况,您需要调整链接器设置(如/EHsc标志),以便try-catch可以处理所有异常,即使对于发布版本也启用调试信息,以便.PDB生成,你可以得到调用堆栈。使用API​​挂钩,这样C-runtime调用就不会禁用你的全局异常处理程序和批次!

见这些:

我唯一的建议是从简单的方法入手,不要为更复杂的场景而烦恼。简而言之,只需在单线程应用程序中使用SetUnhandledExceptionFilter导致访问冲突,在全局异常处理程序中,使用MinidumpWriteDump创建MINI转储(即没有内存转储)。 / p>