gpt4 book ai didi

在调用堆栈为空的 Visual Studio 中调试小型转储

转载 作者:行者123 更新时间:2023-12-03 08:25:29 27 4
gpt4 key购买 nike

我有一个客户遇到了 100% 可重现的崩溃,我无法在我在 Visual Studio 2005 中编译的程序中复制该崩溃。我向他们发送了我的程序的调试版本,并将所有 PDB 和 DLL 文件放在手边。他们向我发送了小型转储文件,但是当我打开它时,我得到:

“MiniDump.dmp 中 0x00000000 处未处理的异常:0xC0000005:访问冲突读取位置 0x00000000。”

然后调用堆栈只显示“0x00000000()”,反汇编显示了 0x0 处的内存转储。我已经设置了符号服务器,加载了我的 PDB 符号等。但是我看不出有任何方法可以知道许多 DLL 中的哪一个实际上导致跳转为空。这是一个具有许多依赖项的大型项目,其中一些是我没有源或 PDB 的二进制文件,因为我将 API 用作第 3 方。

那么这个小型转储到底有什么用呢?如何查看导致崩溃的 DLL?我以前从未真正使用过小型转储进行调试,但我读过的所有教程似乎至少显示了一个函数名称或其他可以为您提供调用堆栈线索的内容。我只是得到指向空的一行。

我还尝试使用“Depends”来查看是否存在一些 Unresolved DLL 依赖项;然而,在我的三台装有各种 Windows 操作系统的测试机器上,我似乎得到了三组不同的操作系统 DLL 依赖项(但无法复制崩溃);所以这似乎不是诊断问题的特别可靠的方法。

还有哪些其他方法可以确定此问题的原因?有什么方法可以退回一条指令以查看哪个 DLL 跳转为 null?

最佳答案

好吧,在这种情况下,答案似乎是“使用 WinDbg 而不是 Visual Studio 来调试小型转储”。我无法从 VS 中获得任何有用的信息,但是 WinDbg 为我提供了大量有关导致崩溃的函数调用链的信息。

在这种情况下,它仍然没有帮助解决我的问题,因为所有函数都在我使用的第 3 方库中,所以看起来我的特定问题的唯一明确答案是使用日志文件来跟踪状态我的应用程序导致崩溃。

我想如果其他人在调试小型转储时看到类似的无用调用堆栈问题,最佳做法是使用 WinDgb 而不是 Visual Studio 打开它。最适合这项工作的工具是免费的 Microsoft 产品,而不是商业产品,这似乎很奇怪。

这里的另一个教训可能是“任何使用第三方库的程序都需要编写日志文件”。

关于在调用堆栈为空的 Visual Studio 中调试小型转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2360585/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com