3

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

4

2 回答 2

4

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

是的,可以使用DebugDiag 1.2

调试诊断工具 (DebugDiag) 旨在帮助对任何用户模式进程中的挂起、性能下降、内存泄漏或碎片以及崩溃等问题进行故障排除。该工具包括额外的调试脚本,专注于 Internet 信息服务 (IIS) 应用程序、Web 数据访问组件、COM+ 和相关的 Microsoft 技术。

它甚至允许您对转储运行崩溃/挂起分析,并为您提供有关处于睡眠状态的调用堆栈和线程的良好报告(对于挂起转储)。它还允许您处理飞行垃圾场。DebugDiag 进行的转储可以在 DebugDiag、Visual Studio 和 WinDbg 中进行分析。

编辑:如何使用 DebugDiag 的 MSDN 链接在这里

于 2012-09-01T13:51:07.810 回答
2

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

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

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

见这些:

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

于 2012-09-02T05:47:47.020 回答