Microsoft小型转储文件没有提供很多信息

问题描述:

我正在使用Microsoft Minidump功能,因此我可以分析已发布程序中的崩溃。Microsoft小型转储文件没有提供很多信息

https://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx

的代码相似回答这个计算器的问题:

How to write a sample code that will crash and produce dump file?

通常当我有一个碰撞,我可以在Visual Studio中打开崩溃转储文件,它会带我到那些使得排除这些问题非常容易的源代码行。

但有时并不那么容易。

我有一个崩溃转储文件,我无法找到有问题的源代码行。这是为什么?我可以从这个转储文件中获得哪些有用的信息?任何提示在干草堆找到针?

这是我在做什么。

我使用标记签出此版本的源代码。

我复制了相应的pdb文件到同一文件夹的崩溃转储 - 文件是myprogram.exe.3140.dmp

我再打开与用于构建该exe编译器的崩溃转储时,Visual Studio 2012年

然后我看到一些有用的信息:

最后写入时间2017年10月10日十五时28分52秒 流程架构:86 异常代码0000005 异常信息胎面试图读取或写入到它的虚拟地址没有适当的访问权限。 堆信息目前

OS版本6.1.7601

模块: myprogram.exe 1.7.41.0 myprogram.dll 1.1.0.27 等

然后我点击调试与只有

原住民然后我得到对话框:

myprogram.exe.3140.dmp中0x548BFFD5未处理的异常:0xC0000005:执行访问冲突位置0x548BFFD5。

在加载模块中未找到当前堆栈帧。无法显示此位置的来源。

我点击断开按钮

然后它说帧不在模块中。在加载的模块中找不到当前堆栈帧。无法显示此位置的来源。

我再点击查看拆解超链接,请参见:

548BFFD5? ??

什么是问号? ?? ??。这是否表示悬挂指针问题?还有别的吗?

+0

我不完全感到惊讶,你没有得到任何信息:'访问冲突执行位置0x548BFFD5' Borgleader

问号意味着地址0x548BFFD5(您的应用程序试图执行的)中的数据不会反汇编为任何有意义的内容。

正如你所看到的,你可能有一个悬挂的指针或试图执行一个不再存在的对象所指向的函数。或者你试图执行一个指向任何东西的函数指针。

如果您使用符号进行编译,则可能可以返回调用堆栈/堆栈跟踪并查看问题的起始位置。