【问题标题】:Windows Kernel Debbuging: Debug over virtual serial port with WDK 8.1Windows 内核调试:使用 WDK 8.1 通过虚拟串行端口进行调试
【发布时间】:2015-07-10 21:48:01
【问题描述】:

我目前在我的 Windows 8.1 x64 主机上对 Windows 7 x64 目标进行内核调试时遇到了一些问题。我在我的主机上运行带有 WDK 8.1 的 Visual Studio 2013,并且已经配置了在 VMWare 中运行的目标机器。

这是我对目标机器的配置。它是通过主要从这里读取配置的 - http://www.codeproject.com/Tips/545835/Kernel-Mode-Debugging-in-a-VM-using-Visual-Studio

  • Windows 7 x64
  • 带有名称为 \\.\pipe\com2 的 VMWare 的串行端口 COM2。检查 VMWare 中的所有正确选项
  • 通过 msconfig 启用 OS 的调试标志。调试端口是 COM2,以 115200 波特运行。
  • 在配置计算机之前,我在计算机上运行了测试目标客户端“WDK Test Target Setup x64-x64_en-us.exe”

我能够正确配置计算机 - 它创建了 WDK 删除用户帐户。但是,我在实际调试时遇到了一些问题。以下是步骤

  1. 在 VMWare 中启动 Windows 7 x64 目标映像并等待启动菜单
  2. 在 Visual Studio(主机)中,进入调试 -> 附加到进程 -> 选择我的计算机 -> 选择进程“内核” -> 附加
  3. 在 VMWare 中,按 Enter 键启动 Windows
  4. 这需要一段时间,但在我的主机上,Visual Studio 最终会连接。我可以选择“Break All”并实际使用调试器。

但是,如果我在启动内核之前不这样做,我似乎无法连接到调试器。而且我只能附上一次。例如,我不能让 Windows 初始化到桌面,然后构建我的驱动程序并开始调试。调试器将始终挂在“等待重新连接...”。如果我开始调试内核初始化,决定停止调试,然后尝试重新连接或重新连接,情况也是如此;它也会无限期地挂在“等待重新连接...”。

【问题讨论】:

  • 你好@xtef_ 你解决了吗?我有类似的问题
  • 这不是只能在启动过程中连接内核的正常行为吗?
  • @WouterHuysentruit 我不太确定这是否是正常行为;我在网上阅读了相互矛盾的信息。如果这是正常行为,那么这意味着我只能在需要重新启动机器之前调试我的驱动程序一次?因为目前就是这样。在尝试使用 VS 2013 和 WDK 之前,我使用了 VisualDDK visualddk.sysprogs.org,并且能够根据需要多次加载/卸载和调试我的驱动程序。目前我可以在启动时附加一次,然后在重新启动之前永远不会重新附加。
  • 不,你在启动过程中连接内核调试器(否则你会一直盯着“等待重新连接...”),稍后你可以停止驱动程序,更新它并启动它,而调试器继续运行。请注意,我一直使用 WinDbg 进行调试。
  • 就个人而言,除非您有充分的理由需要虚拟机,即您的驱动程序与虚拟机开发相关,否则我只会购买第二台机器并通过以太网连接,这比 COM/ 可靠得多火线。还有这个:virtualkd.sysprogs.org

标签: windows kernel windbg wdk


【解决方案1】:

请使用 WinDbg 进行内核调试。 WinDbg 附带 WDK,与使用 VS2013 相比,它将为您省去很多麻烦。查看Setting Up Kernel-Mode Debugging of a Virtual Machine Manually 了解详细说明。如果你无法让 WinDbg 工作,我可以帮助你,但我已经放弃了使用 VS2013 进行内核调试。

【讨论】:

  • 我在 Visual Studio 中使用 WinDbg 作为内核模式调试器。如果我尝试从命令行启动 WinDbg,则会遇到同样的问题——我只能在启动时附加并在需要重新启动 VM 之前附加一次。我可以调试,但从我的阅读(以及以前使用 VisualDDK 的经验)来看,感觉好像我做错了什么。我应该能够多次加载/卸载我的驱动程序并在不重新启动 VM 的情况下进行调试,因为它与现在已经过时的 VisualDDK 插件一起工作是多么容易。
  • 首先,我想说你应该可以在任何时候多次附加你的调试器。其次,您能否提供更多信息? (1) 创建命名管道时是否检查了“Yield CPU on poll”? (2) 你能分享你的 WinDbg 命令吗?我的看起来像这样windbg -k "com:port=\\.\pipe\com_1,baud=115200,pipe,reconnect"。 (3) 你能分享你的WinDbg打印出来吗?
猜你喜欢
  • 2012-02-03
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2011-08-05
  • 2011-06-23
  • 2017-10-20
  • 1970-01-01
  • 2021-10-29
相关资源
最近更新 更多