c - 无需转储即可分析 BSOD

标签 c windows driver kernel bsod

我正在开发的驱动程序之一导致了 BSOD。不幸的是,由于未配置/资源不足,因此未创建转储文件。我试图重现这次崩溃,但到目前为止还没有成功。

有没有办法使用 WinDbg 或任何其他工具获取一些信息? 我有以下信息:

  • BSOD 的屏幕截图
  • .sys 文件。
  • 它的 pdb
  • 源代码
  • 崩溃的机器

除了转储本身之外,我拥有一切。

我们将非常感谢您的帮助。

<小时/>

正如我上面所说,不存在转储 (/minidump)。这就是实际问题。

对于这个特定的崩溃,我知道我将无法获取堆栈。只需获取特定的代码行就足够了。因为 BSOD 包含模块的地址,所以似乎应该有一种方法来检测它到底是哪一行。正如我上面提到的,我确实有 .sys 文件、pdb 和源代码。

这是取自MSDN的具体代码:SYSTEM_SERVICE_EXCEPTION 。 我怎样才能知 Prop 体的线路是什么?和/或引发的具体异常?

最佳答案

您有崩溃地址,想知道源代码行吗?

启动 kd 或 Windbg,取消该地址及其前面的代码。找到函数入口点(在其中调整堆栈),您现在可以查找符号表。从那里你再次反驳并比较来源。

抱歉,我想您需要阅读一些 asm。我不知道有什么更好的办法。

关于c - 无需转储即可分析 BSOD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11290271/

相关文章:

将单用户应用程序转换为多用户应用程序

.net - 在哪里可以找到在 .NET 中开发的 Windows 服务生命周期的详细 View ?

C++/COM/代理 Dll : method override/method forwarding (COM implementation inheritance)

android - 未为 BT Moverio 200 安装 ADB 驱动程序

windows - 没有在主机上运行的 Windows 调试器上打印 DbgPrintEx (Windows 10)

c - C 中的共享内存变量,extern 关键字

c - 为什么我不能使用 %s 而不是 %c?

oracle - 设置 oracle odbc 驱动程序连接时不出现 TNSNames.ora

c - 当一个函数没有被前向声明时,GCC 不会在编译器阶段抛出错误

c++ - 为 C++ 设置窗口