如何分析BSOD以及它将为我提供的错误信息?

时间:2009-08-24 08:04:37

标签: bsod

好吧,幸运的是我没有编写很多导致BSOD的应用程序,但我只是想知道这个屏幕上信息的有用性。它是否包含任何可以帮助我在代码中找到错误的有用信息?如果是这样,我到底需要什么呢?

然后,系统重新启动,可能已在某处向系统写入了一些错误日志或其他信息。它在哪里,它包含什么以及如何使用它来改进我的代码?

过去,当我与PBX系统进行交互时,我确实经常得到一个BSOD,因为它的驱动程序的文档量不存在,所以我不得不做一些试错编码。幸运的是,我现在为另一家公司工作,并且由于我的代码而没有看到任何BSOD。

2 个答案:

答案 0 :(得分:6)

如果您想要一种相当简单的方法来找出导致操作系统崩溃的原因,那么大约90%的时间会有效 - 假设您有可用的故障转储 - 请尝试以下操作:

  • 将WinDbg作为Debugging tools for Windows包的一部分下载。注意,您只需要安装名为Debugging Tools for Windows的组件。
  • 运行WinDbg
  • 从文件菜单中选择“打开崩溃转储”
  • 当转储文件已加载类型analyze -v并按Enter
  • WinDbg将对崩溃进行自动分析,并在崩溃时提供有关系统状态的大量信息。它通常能够告诉您哪个模块有故障以及导致崩溃的错误类型。您还应该获得可能对您有帮助或可能没有帮助的堆栈跟踪。
  • 另一个有用的命令是kb,它打印出一个堆栈跟踪。在该列表中,查找包含.sys的行。这通常是导致崩溃的驱动因素。

请注意,如果希望堆栈跟踪为您提供函数名称,则必须在WinDbg中configure symbols。要做到这一点:

  • 创建一个文件夹,例如C:\ symbols
  • 在WinDbg中,打开文件 - >符号文件路径
  • 添加:SRV*C:\symbols*http://msdl.microsoft.com/download/symbols

这将缓存来自Microsoft服务器的符号文件。

如果自动分析不充分,那么WinDbg提供了各种命令,使您能够准确计算崩溃时发生的事情。在这种情况下,帮助文件是一个很好的起点。

答案 1 :(得分:3)

一般来说,您不能在应用程序代码中导致操作系统崩溃或错误检查。也就是说,如果您正在寻找一般提示和内容,我建议使用NTDebugging blog。大多数东西都是我的头脑。

当操作系统崩溃时会发生什么,它会写一个内核转储文件,具体取决于当前的标志等,你会得到更多或更少的信息。您可以在windbg或其他一些调试器中加载转储文件。 Windbg有一个有用的!analyze命令,它将检查转储文件,并提供崩溃所涉及的存储桶的提示,以及可能的罪魁祸首。另请查看windbg文档,了解错误检查的一般原因,以及解决问题的方法。