Win7 的调试模式在 VirtualBox 的客户机上不起作用

Posted

技术标签:

【中文标题】Win7 的调试模式在 VirtualBox 的客户机上不起作用【英文标题】:Win7's debug mode not work on VirtualBox's guest machine 【发布时间】:2018-08-26 08:17:04 【问题描述】:

我在我的 virtualbox 上安装 Win7,设置来宾端一个标准的“bcdedit”。 (debugtype=serial, port=1, baudrate=115200 /debug=on)

采取了以下步骤:

    在host端,我给guest系统分配了一个虚拟串口 使用命名管道“\.\pipe\debug”设置它。 我启动 Windbg 连接“\.\pipe\debug”,我得到“无法打开管道 Win32 错误 0n2” 打开guest机器后,我重新打开Windbg,它工作正常,但只是说“Opend \.\pipe\debug Waiting to reconnect...”,似乎没有与Guest机器通信的调试数据。 我尝试“bcdedit /bootdebug on”,然后重新启动机器。这次我在启动过程中看到了 Windbg 的几个输出。

BD:启动调试器已初始化连接到 Windows 启动调试器 7601 x64 目标(2018 年 3 月 17 日星期六 17:28:46.559 (UTC + 8:00)),ptr64 TRUE 已建立内核调试器连接。 ************* 路径验证摘要 ************** 响应时间 (ms) 位置延迟 srvC:\Symbolshttp://msdl.microsoft.com/download/symbols 符号 搜索路径是: srvC:\Symbolshttp://msdl.microsoft.com/download/symbols 可执行文件 搜索路径为:GetXStateConfiguration() 中的 ReadVirtual() 失败 第一次读取尝试(错误 == 997。Windows 启动调试器内核版本 7601 UP Free x64 Machine Name: Primary image base = 0x000000000052d000 Loaded module list = 0x00000000005df9e0 系统 正常运行时间:不可用 关闭发生在(3 月 17 日星期六 17:28:53.382 2018 (UTC + 8:00))...卸载所有符号表

证明“\.\pipe\debug”可以传输Guest VM的COM1的输出。

    进入登录控制台时,我看到这样的消息,之前的输出变成灰色:

****************** 路径验证摘要 ************** 响应时间 (ms) 位置延迟 srvC:\Symbolshttp://msdl.microsoft.com/download/symbols 等待 重新连接...

    我登录并检查设备管理器,我找不到设备 COM1。但是如果我关闭/debug,我可以。(确实,我使用putty检查Guest'COM1和Host的原始文件,我发现它也可以,将putty的输入写入Host的文件)

    我用不同的 COM 和波特率尝试了很多次,总是得到相同的输出。

    我尝试了类似的 VMware Station,得到了相同的结果。

    更换主机并重新执行上述步骤后问题消失。(:

问题:

    为什么在来宾计算机上看不到打开 /debug 的 COM1 设备? 波特率重要吗? (Host 的 windbg 设置、Guest 的 Device 设置和 Guest 的 debug 设置不匹配),我尝试在 Windbg 中“循环波特率”,它说 Net COM 端口波特率被忽略。 如何诊断问题?

_编辑:

我发现了一个类似的帖子stuck on "reconnecting" 这个问题My Kernel Debugger Won’t Connect 提到有一个热键“Ctrl+Alt+D”来显示 Windbg 的 I/O 的详细信息,而不是黑盒。而且如帖子所说,“/debug=on”时COM1消失是正常和合理的。

我可以看到 windbg 为同步来宾付出的努力。按“ctrl+break”后,我看到windbg说“Send Sync”,但仍然卡住……而且,我将按“Host+Q”关闭guest。奇迹发生了。 Windbg活过来,成功闯入。

我尝试了几次,没有失败。现在我可以愉快地工作了……但是为什么呢???

当我按下“Ctrl+break”时,windbg 会说

发送同步中断

发送中断 ...

卡住了,目标机器也暂停了。然后按“Host+Q”再按“Esc”就可以了。

【问题讨论】:

【参考方案1】:

在物理机上安装vbox(以后物理机为Host) 在 vbox 中安装 os(vbox 中的 os 是 Target 以后) 重启 Target 看看是否一切顺利 在 Target 中打开提升的命令提示符

因为你还没有创建一个Debug BootEntry,所以先创建一个

run bcdedit /copy /? for syntax 
to copy current bootentry to a new one you will be using 
bcddedit /copy current /d "MyPipeDream" 
current is alias for the current boot entry ID a GUID
MyPipeDream is a descriptive string 
if you reboot now you should get two boot entries to choose from 

选择新的启动项来启动,这样您就可以使用 current 众所周知的 ID 进行操作,而不是复制粘贴或错误输入冗长且不直观的 guid

假设你启动了 MyPipeDream

您可以使用以下命令检查和启用当前 id 的调试 bcdedit /debug current on

您应该再次重新启动到 MyPipeDream,现在将启用调试功能,如下面的屏幕截图所示

但在重启之前在 vbox 设置中设置串行接口

还取消选中连接到现有的,以便 vbox 创建管道 而不是尝试连接到现有管道

目标的所有设置现在都结束了

在主机上创建一个包含以下内容的bat文件并执行它 注意 pipename 它是 pipedream 与我们在 vbox 设置中给出的名称完全匹配,而不是 MyDreamPipe,它是 ID 描述性字符串

start windbg -k com:port=\\.\pipe\pipedream,baud=115200,pipe,reconnect,resets=0

windbg 应该打开并说要重新连接

在HOST WINDBG中按ctrl+break几次,vbox应该连接到windbg或在TARGET中按ctrl+print屏幕

请查看您是否需要功能键(一些无线键盘,如罗技 需要 ctrl+fn+pause / break 组合键而不是普通的 ctrl+break

否则打开调试菜单并选择用户界面中的中断

【讨论】:

确实,我的设置和你的建议一样,/copy,设置调试,分配串口,重启并选择新的启动项。我了解上面的每一步和每一个选项。但是它不起作用,只是说“Debuggee未连接”。我检查虚拟串行端口是否可以访问主机的管道。即使客户操作系统设置调试,也没有调试协议交换。 报废它并重做也许它就像在 vpc 、 vbox 、 qemu 、 vmware 和诸如此类上一样工作 /debug on 是唯一需要的命令,如果你可以使用 os > win 8.1 in target您可以使用网络调试,这也可以顺利使用 afaik

以上是关于Win7 的调试模式在 VirtualBox 的客户机上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Windbg+VirtualBox双机调试环境配置(XP/Win7/Win10)

VM virtualBox虚拟机ping不通win7宿主机怎么办

如何在VirtualBox虚拟机上安装win7系统

Win7系统用VirtualBox-4.1.4 安装XP系统的虚拟机 虚拟机怎么上网,求详细步骤,我是在用路由器上的,

如何在VirtualBox虚拟机上安装win7系统

本机如何直接 访问云服务器上的 virtualbox 虚拟机