使用Visual Studio调试故障转储时缺少调用堆栈帧

时间:2010-11-14 08:37:08

标签: visual-studio-2008 debugging

我正在尝试在某些本机代码中调试访问冲突错误,并且我有崩溃的小型转储。

使用visual studio打开故障转储时,会发生以下情况:

如果VS无法找到有问题的本机DLL的符号,它会显示正确的调用堆栈帧(包括我的代码中生成错误的位置)。但是我当然看不到消息来源。

如果VS可以找到符号(我把它们放在正确的位置并且输出窗口显示MyProblematic.dll的符号已加载),我只看到调用堆栈中的一个帧 - 即msvcr90.dll。显然这对我没什么帮助。

任何人都能解释一下吗?

由于

1 个答案:

答案 0 :(得分:1)

嗯,这很容易解释。如果堆栈框架已损坏,那么minidump接受者和调试器都无法遍历堆栈以向您显示更多内容。容易做,例如只是strcpy()并溢出堆栈缓冲区的末尾,以便保存的EBP和返回地址被踩踏。并且,是的,几乎不可能诊断,无论小型泵的质量有多好。祝你好运。