【问题标题】:how to get memory dump after blue screen蓝屏后如何获取内存转储
【发布时间】:2010-12-03 19:23:47
【问题描述】:

我在启动时从我正在编写的驱动程序 (STOP: 0x0000007E) 中得到了一个可爱的 BSOD,并且想加载内存转储以进行分析。但是,它不会被倾倒在任何地方。在启动和恢复设置中一切都设置正确,但我没有得到转储文件,并且事件日志中没有任何内容表明已发生转储。看起来甚至没有发生转储...

我知道导致它的确切代码行(对IoAttachDevice() 的调用),但不确定原因,并想查看DbgPrint 输出以了解它到底在哪里失败。在设置转储功能之前,Windows 可能会崩溃吗?如果是这样,我如何在故障发生时访问机器的状态?

更新:其他可能有用的信息:我在 Linux 主机上通过 VirtualBox 运行 Windows XP。

【问题讨论】:

  • 如果您在进行 Windows 内核编程,您需要在 Windows 主机上安装一个 Windows VM。
  • @BenVoigt 为什么不在 Linux 主机上安装 Windows VM?
  • @MilindR:你如何在你的 Linux 主机上运行 WinDbg?内核调试需要在 VM 内部和外部使用 Microsoft 工具。所以不,Linux 主机上的 Windows VM 还不够好。
  • @BenVoigt 另一个 Windows 虚拟机。连接串行端口。从我读到的关于它的内容来看,它没有什么异国情调。

标签: windows device-driver bsod


【解决方案1】:

我不知道您为什么没有得到转储文件,但如果您可以访问机器,请将内核调试器附加到它以重现错误 - 您将留下机器坐在调试器,准备就绪(如果您也想离线调试,可以让调试器为您生成转储文件)。

【讨论】:

  • 查看我的更新。我在 Linux 主机上通过 VirtualBox 运行,所以无法设置远程调试器(至少……)。
  • @user464164:您可以启动第二个 Windows 客户机并连接虚拟 COM 端口。自从我使用 VBox 已经有一段时间了,但我认为您可以告诉它使用 UNIX 域套接字,然后使用像 socat 这样的外部工具在它们之间传输数据。
  • 补充...我认为 sysinternals 的家伙为windbag 编写了一个扩展或插件,可以让您在单台机器上进行内核调试。查看 sysinternals.com 站点,看看您能找到什么。 (请注意,sysinternals 现在重定向到 microsoft 站点。)
  • @JimR:如果机器没有完全启动,那么你就无法加载内核调试器......是吗? WinDbg 允许有限的本地内核调试,但在引导期间不允许。
  • @Ben Voigt:我记得它对一些启动时间问题很有用,但是,那是很久以前的事了。现在完全有可能没用了。当他们获得 sysinternals 时,MS 也有可能杀死了插件/扩展。我仍然认为值得一试,因为它确实让一些事情不那么烦人。
【解决方案2】:

右键单击“我的电脑”选择“高级”,在“启动和恢复”下单击“设置”。选择“内核内存转储”或“完整内存转储”。

【讨论】:

    【解决方案3】:

    您的驱动程序的启动设置是什么?如果它在引导顺序中启动得太早,文件系统可能还没有以读写方式重新挂载,因此没有地方可以进行转储。

    开发中的驱动程序通常不应设置为自动启动,除非您在稍后加载驱动程序时使驱动程序稳定。当然,您最终需要将其设置为自动启动,这样您才能验证它是否正常工作,但这会在稍后进行。

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 1970-01-01
      • 2020-12-27
      • 2012-04-29
      • 2019-01-18
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多