创建完全崩溃转储的API

时间:2016-02-23 03:13:50

标签: crash-reports crash-dumps windows-error-reporting

我想知道是否有任何API可用于创建完整的崩溃转储。

目前,我正在使用MiniDumpWriteDump() API和MiniDumpWithFullMemory。 但是,我从获取的转储中获取的信息并不多。

1 个答案:

答案 0 :(得分:-1)

你说你需要一个调用堆栈和内存信息 - 这两个用于调试的东西=)!

调用堆栈

了解如何从崩溃转储文件创建调用堆栈很有帮助。这是MSDN关于如何生成调用堆栈的引用,我拿出了我在这里发现最相关的点,但值得完整阅读link

  • 在调试已崩溃的应用程序时,调试器 试图向你展示堆栈上的功能 崩溃。没有PDB文件,调试器无法解析该功能 名称,其参数或存储在其中的任何局部变量 堆栈。
  • 如果使用Omit编译当前堆栈上的函数 帧指针(/ Oy)优化,如果符号不存在, 调试器无法可靠地确定调用哪个函数 当前的功能。
  • 如果您看到有关缺少符号的警告,或未加载符号, ......从那时起不要相信堆栈。
  • 即使您的调用堆栈中的库没有PDB 可用,只要它们是用帧指针编译的, 调试器应该能够正确猜出父函数。 从Windows XP Service Pack 2开始,所有Windows DLL和 可执行文件在FPO禁用的情况下编译...在。的版本上 Windows XP SP2之前的Windows,所有操作系统二进制文件都需要 匹配包含FPO信息的符号文件,以便准确 调试和分析。
  • 如果调试64位本机可执行文件,则不需要符号文件 生成有效的堆栈跟踪,因为x64操作系统和 编译器的设计不需要它们。但是,你仍然需要 符号文件检索函数名称,调用参数和 局部变量。

我仍会查看Windows错误报告,您实际上已经在使用它(API) - 专门设置本地崩溃转储。您可以使用注册表项打开它们,然后通过设置DumpType = 2启用“完全转储”。如果您需要从代码生成故障转储文件,我会尝试优化on this MSDN article about crash dump analysis

有关使用注册表设置设置本地故障转储的更多信息,请参阅Collecting User-Mode Dumps - 或者尝试在崩溃转储分析文件中进行优化 - 并确保您的PDB =)。

快乐的调试。