8

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

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

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

4

2 回答 2

7

如果您想要一种相当简单的方法来找出导致操作系统崩溃的原因,并且在大约 90% 的时间里都可以正常工作(假设您有可用的崩溃转储),请尝试以下操作:

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

请注意,如果您希望堆栈跟踪为您提供函数名称,则必须在 WinDbg中配置符号。去做这个:

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

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

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

于 2009-08-24T08:23:50.877 回答
3

一般来说,您不能在应用程序代码中导致操作系统崩溃或错误检查。也就是说,如果您正在寻找一般提示和资料,我推荐NTDebugging 博客。大多数事情都超出了我的想象。

当操作系统崩溃时会发生什么,它将写入一个内核转储文件,这取决于当前的标志等等,你会在其中获得或多或少的信息。您可以在 windbg 或其他调试器中加载转储文件。Windbg 有一个有用的!analyze命令,它将检查转储文件,并为您提供有关崩溃落入的存储桶以及可能的罪魁祸首的提示。还要检查有关错误检查的一般原因的 windbg 文档,以及您可以采取哪些措施来解决它。

于 2009-08-24T08:10:39.123 回答