0

基本上,应用程序在 VMWare 映像 (Win764) 中冻结,因此我使用任务管理器创建了应用程序故障转储。它创建了故障转储就好了。然后,我使用 WinDbg 打开故障转储,同时链接到完美运行的符号,因为我现在可以看到所有线程、进程和调用堆栈。当我单击调用堆栈中的一个项目时,它会在 WinDbg 中打开一个窗口,显示源文件中调用堆栈的该部分所在的实际代码行。

现在我的问题是,在以这种方式进行调试时,WinDbg 中显示的信息有多准确/可靠?似乎有时它显示应用程序所处的状态根本没有任何意义......就像它显示了不可能的场景或 100% 从未发生过的场景。例如,我看到它显示一个操作开始并完成,但是当我检查正确写入的日志文件时,显示该操作从未发生过。它记录了它从未发生过,然后它成功地继续前进。还有,手术的结果,就算完成了,也绝对不会发生。很明显可以看出操作是否真的开始并发生了。

崩溃转储是否有可能以任何方式完全错误或显示旧信息?

4

1 回答 1

0

到目前为止,我看到的任何转储都是正确的,它准确地显示了进行转储时的过程。但是有一些事情要记住:

  • 确保查看与转储版本真正匹配的正确源代码。我经常遇到这种情况:我正在查看错误版本的源代码,而我的印象是这种情况永远不会发生。
  • 如果应用程序损坏了某些东西(例如堆栈),您也只会在转储中看到损坏的东西,这有时可能会产生误导。如果你相信你所看到的,你需要自己去发现。
  • 如果应用程序看起来冻结,它仍然可以更改堆栈,因为它处于无限循环中。对冻结的应用程序进行几次转储,看看有什么变化。
  • 日志输出可能不是最新的(如 Hans Passant 所述),原因如下:缓冲区未刷新或应用程序通过覆盖文件名、破坏文件句柄等方式使日志文件崩溃。
于 2013-12-29T23:44:45.407 回答