【问题标题】:How do I analyse a BSOD and the error information it will provide me?如何分析 BSOD 以及它将提供给我的错误信息?
【发布时间】:2019-05-04 21:54:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: bsod


    【解决方案1】:

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

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

    请注意,如果您希望堆栈跟踪为您提供函数名称,则必须在 WinDbg 中使用 configure symbols。为此:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 您可以通过调用相关的 Windows API 方法从代码中导致蓝屏死机。这是大多数设备驱动程序实际上正在做的事情。他们没有解决错误,而是将系统置于紧急模式。幸运的是,现在大多数现代设备驱动程序都试图避免恐慌模式,而是尝试解决错误。
      猜你喜欢
      • 2020-06-14
      • 2017-08-22
      • 1970-01-01
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      • 2010-09-25
      相关资源
      最近更新 更多