从任务管理器获取时,在Windows上应用程序崩溃转储中显示的状态是否准确?

时间:2013-10-09 15:11:20

标签: c++ windows-7 windbg crash-dumps

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

现在我的问题是,在以这种方式进行调试时,WinDbg中显示的信息是多么准确/可靠?有时它显示应用程序所处的状态似乎根本没有任何意义...就像它显示了不可能的情景或100%从未发生的情景。例如,我已经看到它显示一个操作已经开始并完成,但是当我检查正确写入的日志文件时,显示操作从未发生过。它记录它从未发生过并且之后成功地向前移动。另外,操作的最终结果,如果完成,绝对没有发生。很明显,看看操作是否实际开始和发生。

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

1 个答案:

答案 0 :(得分:0)

到目前为止我看到的任何转储都是正确的,因为它在转储时完全显示了进程。但有一些事情需要记住:

  • 确保查看与转储版本真正匹配的correc源代码。我经常遇到这种情况:我正在查看错误的源代码版本,我的印象是这种情况永远不会发生。
  • 如果应用程序损坏了某些内容(例如堆栈),您只会看到转储中已损坏的内容,这有时会产生误导。如果你相信你所看到的,你需要自己找出来。
  • 如果应用程序看起来已冻结,它仍然可以更改堆栈,因为它处于无限循环中。获取冻结应用程序的几个转储以查看更改。
  • 日志输出可能不是最新的(正如Hans Passant已经说明的那样),原因有以下几点:缓冲区未刷新或应用程序因覆盖文件名而破坏日志文件,销毁文件句柄等。 / LI>