【问题标题】:Microsoft minidump file not providing much informationMicrosoft minidump 文件未提供太多信息
【发布时间】: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


【解决方案1】:

问号表示地址 0x548BFFD5(您的应用程序正在尝试执行)处的数据不会反汇编为任何有意义的数据。

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

如果你用符号编译,你也许可以回到调用堆栈/堆栈跟踪,看看问题从哪里开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2022-07-29
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多