4

我正在为 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 中运行一个简单的终端,则不会出现明显的减速(当然,调试信息大多是垃圾)。

有任何想法吗?

4

1 回答 1

0

我知道这是一个地狱死灵,但是...

您是否尝试过为内核模式网络调试设置被调试者?我认为减速在很大程度上是因为串行速度太慢了。

http://msdn.microsoft.com/en-us/library/windows/hardware/hh439346%28v=vs.85%29.aspx

如果/当 M$ 决定删除该链接时,您需要执行上述文章的这些部分来进行此设置:

设置目标计算机

要设置目标计算机,请执行以下步骤:

Verify that the target computer has a supported network adapter.

Connect the supported adapter to a network hub or switch using standard CAT5 or better network cable. Do not use a crossover cable, and do not use a crossover port in your hub or switch.

In an elevated Command Prompt window, enter the following commands, where w.x.y.z is the IP address of the host computer, and n is a port number of your choice:

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

bcdedit will display an automatically generated key. Copy the key and store it on a removable storage device like a USB flash drive. You will need the key when you start a debugging session on the host computer.

Note  We strongly recommend that you use an automatically generated key. However, you can create your own key as described later in the Creating Your Own Key section.

If there is more than one network adapter in the target computer, use Device Manager to determine the PCI bus, device, and function numbers for the adapter you want to use for debugging. Then in an elevated Command Prompt window, enter the following command, where b, d, and f are the bus number, device number, and function number of the adapter:
bcdedit /set "{dbgsettings}" busparams b.d.f
Reboot the target computer.

要连接到它,请使用以下步骤:

Using WinDbg

On the host computer, open WinDbg. On the File menu, choose Kernel Debug. In the Kernel Debugging dialog box, open the Net tab. Enter your port number and key. Click OK.

You can also start a session with WinDbg by opening a Command Prompt window and entering the following command, where n is your port number and Key is the key that was automatically generated by bcdedit when you set up the target computer:

windbg -k net:port=n,key=Key

If you are prompted about allowing WinDbg to access the port through the firewall, allow WinDbg to access the port for all the different network types.

Using KD

On the host computer, open a Command Prompt window. Enter the following command, where n is your port number and Key is the key that was automatically generated by bcdedit when you set up the target computer:

kd -k net:port=n,key=Key

If you are prompted about allowing KD to access the port through the firewall, allow KD to access the port for all the different network types.
于 2013-10-15T15:44:55.753 回答