【问题标题】:Can't debug correctly Windows drivers with Visual Studio无法使用 Visual Studio 正确调试 Windows 驱动程序
【发布时间】:2016-10-21 09:14:52
【问题描述】:

我使用 Visual Studio 编写了一个 Windows 驱动程序示例 (WDM),但在尝试调试它时遇到了问题。目标在虚拟机中运行 (VMware)
我已按照文档 (http://msdn.microsoft.com/en-us/library/windows/hardware/hh698272(v=vs.85).aspx) 配置所有内容。
它编译正常,但调试时出现问题。

我尝试了各种配置,每个配置都有不同的问题。

Win7(主机)/Win8.1 预览(目标)上的 Visual Studio 2013 预览版 - VMware

调试器似乎无法正常工作。实际上,就像没有加载任何内容一样,模块窗口是空的,当我单击“全部中断”时,什么也没有发生。正如您在日志中看到的,未创建调试器会话。

截图: 日志:http://pastebin.com/DfVzGR4Z

Win7(主机)/Win8(目标)上的 Visual Studio 2012 - VMware

它在第一次尝试时工作正常,但如果我停止调试器来修改驱动程序,它会冻结 VM。然后我必须重新启动 VM、Visual Studio 并终止进程 ntkd.exe,否则我会出现以下错误:

  • 创建流程实例失败会阻止调试
  • 无法启动(null),错误 80004005。(未指定的错误)
  • 随后 VS 崩溃(事件名称:CLR20r3)

我尝试过从 MSDN 下载的其他示例,但问题相同。

我已经被这些问题困扰了好几个星期了,我开始绝望了,所以任何帮助都将不胜感激。没试过WinDDK,但是由于VS什么都有,不明白为什么不能正常使用。

【问题讨论】:

  • 我在 Visual Studio Communities 2017 中遇到了类似的问题 --> WinDevEval (virtualbox win10 评估) Debuggee 莫名其妙地死机 -- 我尝试使用 WinObj.exe 查看目标计算机,发现驱动程序安装正确,然后我创建了一个基本的 MFC 应用程序,它打开和关闭设备驱动程序的句柄并且可以工作(在管理员模式下运行时) - 不知何故,调试没有进一步

标签: visual-studio driver


【解决方案1】:

我建议忘记使用 Visual Studio 进行驱动程序开发/调试,因为在我看来,它不够可靠。

但针对调试过程,最好先安装VisualDDK,然后启动vmmon/vmmon64。

在已安装的应用程序中,您会找到一个名为“target”的文件夹,其中包含一个名为 DDKLaunchMonitor.exe 的应用程序,将其安装在虚拟机中(它将创建一个启动菜单选项以激活内核调试)

当你想调试你的驱动程序时,启动 vmmon,激活在 vm 启动时启动 windbg 的选项,启动你的 vm,当 Windows 启动时它会加载 windbg 并附加到 vm。

根据需要安装驱动程序并学习windbg。

我知道这个答案并不能解决你使用 VS 的问题,但直接使用 windbg 更快更好。

【讨论】:

  • 感谢您的回复,我试试VisualDDK
  • 忘记了什么。我不记得VirtualKD是否带有VisualDDK包,如果没有,也使用它。在同一页上。
  • 你知道VisualDDK是否支持WDK 8吗?我无法在设置向导中配置 %WDKPATH% 值。
  • 我虽然没有安装 WDK 8,但您可以在默认安装位置键入“C:\Program Files (x86)\Windows Kits\8.0\”。不用担心,因为调试时您不需要它。运行VMMON(VMMON64)并按“调试器路径”按钮找到windbg并勾选“自动启动调试器”。
  • @serup 虽然VS有所改进,但我还是更喜欢windbg驱动和VirtualKD。 Win10唯一的问题是替换kdcom.dll的额外工作
【解决方案2】:

我遇到了类似的问题:Visual Studio 2015 Community Edition、Windows 10 主机、Windows 10 目标、VirtualBox with host only network。

配置和远程驱动程序部署工作正常,但调试器无法连接。

编辑:在 VS2015 配置的最后一步中,可以选择 Host IP。下面的手动方法是一种替代方法。

manual setup guide for kernel mode debugging 表示要运行以下命令:

bcdedit /debug on
bcdedit /dbgsettings net hostip:w.x.y.z port:n

Visual Studio 在配置过程中自动运行这些。注意hostip 参数 - 这必须是连接机器的地址(带有调试器的机器)在它用来连接到目标的接口上。如果您有多个网络接口,Visual Studio 可能会错误地设置它。在我的例子中,仅 VirtualBox 主机的网络创建了额外的网络接口。

如果您还没有在 VS 中配置目标机器。然后运行上述两个bcdedit命令并重启目标机器。在此之后,调试器应该可以正常连接。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。 windbg 连接挂起。我发现内核模式调试器设置的配置有问题(Visual Studio 2012 Driver->test->Configuration)。我将端口简单地设置为 com1。其实应该是\.\pipe\com_1。然后就可以了 在您的情况下,可能还有其他配置问题。您可以通过网页http://www.codeproject.com/Tips/545835/Kernel-Mode-Debugging-in-a-VM-using-Visual-Studio查看积分。

    【讨论】:

    • 但是,尽管每次调试器立即可以在中断后连接到虚拟机,但有时它会在目标虚拟机重新启动后经常在符号路径搜索和可执行路径搜索后停止。无论如何,我同意 Visual Studio 2012 中的内核调试是浪费时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多