我正在为 Windows 7 编写一些启动(登录前)代码,并希望能够对其进行调试(如果只是为了看看它是如何工作的,因为 Microsoft 的文档很糟糕)。
我的环境是Linux主机上的VirtualBox,有3台Windows VM(一台Windows 2008域控制器,一台Windows 7开发机,一台Windows 7测试机),我希望能够调试测试的启动过程使用虚拟串行连接两个虚拟机从开发机器远程机器。
[在另一种生活中,我在 Windows 主机上使用 VMware 工作站从另一个 linux VM 中调试了 Linux 内核驱动程序,所以我知道这种事情可能是可行的。]
我见过有人使用windbg 从主机调试VirtualBox VM 中的Windows,但我需要从第二个来宾执行此操作(因为我的主机不是Windows)。有没有人想出如何做到这一点?
编辑: 我在发布之前尝试了明显的方法。我在每个 VM 配置中创建了一个虚拟串行端口,并将它们都连接到同一个主机管道,由开发 VM(调试器)创建并由测试 VM(被调试者)使用。然后我跑了
bcdedit /dbgsettings serial debugport:1 baudrate:115200
bcdedit /debug {current} on
在测试虚拟机中并关闭它。在 dev VM 中运行 windbg 选择内核调试(在正确的串行端口上)并重新启动测试 VM。出现了一些关于没有可用符号并且测试 VM 挂起的消息。
从那以后,我发现了这篇文章:http ://www.benjaminhumphrey.co.uk/remote-kernel-debugging-windbg-virtualbox/ (尽管那个人使用的是 Windows 主机)似乎准确地描述了我尝试过的方法,但他的测试虚拟机没有挂起。我在 wndbg 窗口中得到的输出与他的相同,但在“Windows XP Kernel ...”行之前停止
我现在不太确定这个问题是否与 VirtualBox 有关,更不确定我是否正确使用了 windbg。任何帮助,将不胜感激。
另一个编辑我尝试将测试 VM 的虚拟串行端口附加到主机文件,并在文件中得到一些调试输出。我尝试将两个 VM 的虚拟串行端口设置为指向主机管道并在 Dev VM 中运行终端(而不是 WinDbg),并在终端中获取调试信息。
我想我现在已经确定这绝对是 WinDbg 而不是 VirtualBox 的问题(我将删除 virtualbox 标签并用 windbg 替换它)但我不确定为什么 WinDbg 不说话。
更多信息: 我刚刚升级到 VirtualBox 4.2.4(不确定版本是否重要)并再次查看了这个。
我重建了测试虚拟机并且更有耐心了!
现在看来,测试虚拟机正在运行——我最终在 windbg 窗口中得到了一些输出——但调试对象操作系统启动大约需要 15分钟!这显然对日常内核调试没有用处。我不知道为什么这应该这么慢......如果我在开发虚拟机而不是 windbg 中运行一个简单的终端,则不会出现明显的减速(当然,调试信息大多是垃圾)。
有任何想法吗?