有没有办法在应用程序崩溃时自动创建崩溃转储文件(在Windows操作系统上),就像我可以在Visual Studio调试器附加的情况下保存一样?也就是说,我希望能够使用自动生成的崩溃转储文件在Visual Studio中调试我的应用程序。
有没有办法在应用程序崩溃时自动创建崩溃转储文件(在Windows操作系统上),就像我可以在Visual Studio调试器附加的情况下保存一样?也就是说,我希望能够使用自动生成的崩溃转储文件在Visual Studio中调试我的应用程序。
更新:Debug Diag 2.0现在已经发布。此版本支持原生的.NET转储。
使用DebugDiag 1.2也是可以实现的。
Debug Diagnostic工具(DebugDiag)旨在帮助您解决各种用户模式进程中出现的问题,例如挂起、性能下降、内存泄漏或碎片化以及崩溃等。该工具还包括专注于Internet信息服务(IIS)应用程序、Web数据访问组件、COM+和相关Microsoft技术的附加调试脚本。
它甚至可以在转储文件上运行崩溃/挂起分析,生成有关处于休眠状态的堆栈和线程的详细报告(针对挂起转储)。它还允许您进行即时转储。 DebugDiag采集的转储文件可在DebugDiag、Visual Studio和WinDbg中进行分析。
编辑:有关如何使用DebugDiag的MSDN链接在此处。
SetUnhandledExceptionFilter
来捕获异常。在全局异常处理程序中,使用MiniDumpWriteDump
函数创建转储文件。abort
C运行时调用等)。此外,如果多个线程引起某些异常,您可能会遇到问题。当您在全局异常处理程序中收到异常时,您需要挂起所有其他正在运行的线程,或者使用一些逻辑,使其他线程不会干扰您的转储生成代码。/EHsc
标志),以便通过try-catch
处理所有异常,即使是在发布版本中也要启用调试信息,以便生成.PDB,并且您可以获取调用堆栈。使用API钩子,以便C运行时调用不会禁用您的全局异常处理程序等等!SetUnhandledExceptionFilter
引发访问冲突异常,在全局异常处理程序中使用MinidumpWriteDump
创建MINI转储(即无内存转储)。(as an expandable string)
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\DumpFolder
%LOCALAPPDATA%\CrashDumps
。WOW6432Node
。