【发布时间】:2018-03-23 01:24:51
【问题描述】:
我正在使用 Microsoft Minidump 功能,以便分析已发布程序中的崩溃。
https://msdn.microsoft.com/en-us/library/windows/desktop/ee416349(v=vs.85).aspx
代码类似于这个stackoverflow问题的答案:
How to write a sample code that will crash and produce dump file?
通常当我发生崩溃时,我可以在 Visual Studio 中打开故障转储文件,它会将我带到有问题的源代码行,这使得解决这些问题变得非常容易。
但有时并不那么容易。
我有一个故障转储文件,我无法在其中找到有问题的源代码行。这是为什么?我可以从这个转储文件中得到什么有用的信息?大海捞针有什么诀窍吗?
这就是我正在做的事情。
我按标签检查了此版本的来源。
我将相应的 pdb 文件复制到与故障转储相同的文件夹中 - 文件是 myprogram.exe.3140.dmp
然后,我使用用于构建 exe 的编译器 Visual Studio 2012 打开故障转储。
然后我看到一些有用的信息:
最后写入时间 10/10/2017 15:28:52 进程架构:x86 异常代码 0xC0000005 异常信息 踏板试图读取或写入它没有适当访问权限的虚拟地址。 堆信息存在
操作系统版本 6.1.7601
模块: 我的程序.exe 1.7.41.0 我的程序.dll 1.1.0.27 等等
然后我点击 Debug with Native Only
然后我得到对话框:
myprogram.exe.3140.dmp 中 0x548BFFD5 处的未处理异常:0xC0000005:访问冲突执行位置 0x548BFFD5。
在加载的模块中找不到当前堆栈帧。无法显示此位置的来源。
我点击中断按钮
然后它说框架不在模块中。在加载的模块中找不到当前堆栈帧。无法显示此位置的来源。
然后我点击查看反汇编超链接看看:
548BFFD5 ?? ??
问号是什么? ?? ???。这是否表明悬空指针问题?还有什么?
【问题讨论】:
-
我对你没有得到任何信息并不感到惊讶:
Access violation executing location 0x548BFFD5
标签: c++ visual-studio visual-studio-2012 crash crash-dumps