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

x759pob2  于 2023-10-23  发布在  其他
关注(0)|答案(3)|浏览(155)

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

ctehm74n

ctehm74n1#

更新:Debug Diag 2.x现已可用。此版本原生支持.NET转储。

可以使用DebugDiag 1.2
故障诊断工具(BLOG Diag)旨在帮助解决挂起、性能降低、内存泄漏或碎片以及任何用户模式进程中的崩溃等问题。该工具包括其他调试脚本,重点是Internet信息服务(IIS)应用程序,Web数据访问组件,COM+和相关的Microsoft技术。
它甚至允许您在转储上运行崩溃/挂起分析,并给予一个关于处于睡眠状态的调用堆栈和线程的报告(对于挂起转储)。它也可以让你采取对苍蝇转储太多。可以在VisualStudio、WinDbg和VisualDiag中分析由VisualDiag获取的转储。

**编辑:**如何使用Mylog Diag的MSDN链接是here

xkftehaa

xkftehaa2#

使用SetUnhandledExceptionFilter捕获异常。在这个全局异常处理程序中,使用MiniDumpWriteDump函数创建一个转储文件。
这种方式有很多关于异常处理的问题,比如你不能捕获所有的异常(STL异常,纯虚函数,abort C运行时调用等)。此外,如果多个线程导致某个异常,则可能会出现问题。在全局异常处理程序中遇到异常时,您需要挂起所有其他正在运行的线程,或者使用某些逻辑,以便其他线程不会干扰转储生成代码。
要处理所有情况,您需要调整链接器设置(如/EHsc标志),以便所有异常都可以由try-catch处理,甚至为发布版本启用调试信息,以便生成.PDB并可以获取调用堆栈。使用API挂钩,这样C运行时调用就不会禁用全局异常处理程序和批!
看看这些:

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

brgchamk

brgchamk3#

您可能需要检查WER(Windows Error Reporting)。
可以使用注册表项配置它以生成C++应用程序的崩溃转储(不适用于.NET)。
注册表项 *:

(as an expandable string)
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\DumpFolder

我将值设置为%LOCALAPPDATA%\CrashDumps
此外,您可以只过滤到您的应用程序或最大化转储的数量,甚至设置转储的类型。

  • 如果是在64位系统上运行的32位应用程序,则需要在Software和Microsoft之间插入WOW6432Node

相关问题