4

私は Windows 7 のスタートアップ (ログオン前) コードに取り組んでおり、それをデバッグできるようにしたいと考えています (Microsoft のドキュメントはひどいので、実際にどのように機能するかを確認するためだけに)。

私の環境は Linux ホスト上の VirtualBox で、3 つの Windows VM (Windows 2008 ドメイン コントローラー、Windows 7 開発マシン、および Windows 7 テスト マシン) があり、テストの起動プロセスをデバッグできるようにしたいと考えています。仮想シリアル接続を使用して開発マシンからリモートでマシンを 2 つの仮想マシンに接続します。

[別の人生で、Windows ホスト上の VMware ワークステーションを使用して、ある Linux VM の Linux カーネル ドライバーを別の Linux VM からデバッグしたことがあるので、この種のことが潜在的に実行可能であることを知っています。

ホストから VirtualBox VM で Windows をデバッグするために windbg を使用している人を見てきましたが、2 番目のゲストから実行する必要があります (私のホストは Windows ではないため)。誰もそれを行う方法を考え出しましたか?

編集: 投稿する前に、明らかなアプローチを試しました。各 VM 構成に仮想シリアル ポートを作成し、両方を同じホスト パイプに接続して、開発 VM (デバッガー) によって作成され、テスト VM (デバッグ対象者) によって使用されます。それから走った

bcdedit /dbgsettings serial debugport:1 baudrate:115200
bcdedit /debug {current} on

テスト VM で実行し、シャットダウンします。(正しいシリアル ポートで) カーネル デバッグを選択した開発 VM で windbg を実行し、テスト VM を再起動しました。使用可能なシンボルがなく、テスト VM がハングしたというメッセージが表示されました。

それ以来、この記事を見つけました:http://www.benjaminhumphrey.co.uk/remote-kernel-debugging-windbg-virtualbox/(その人はWindowsホストを使用していますが)私が試した方法を正確に説明しているようです、しかし彼のテスト VM はハングしません。wndbg ウィンドウに表示される出力は彼のものと同じですが、「Windows XP Kernel ...」という行の前で停止します。

この問題が VirtualBox に関連しているという確信がなくなり、windbg を正しく使用しているかどうかについても確信が持てなくなりました。どんな助けでも大歓迎です。

別の編集テスト VM の仮想シリアル ポートをホスト ファイルに接続しようとしましたが、ファイルにデバッグ出力がいくつかあります。2 つの VM の仮想シリアル ポートをホスト パイプを指すように設定し、Dev VM で (WinDbg ではなく) ターミナルを実行しようとしましたが、ターミナルでデバッグ情報を取得しました。

これは間違いなく VirtualBox ではなく WinDbg の問題であると判断したと思います (virtualbox タグを削除して、windbg に置き換えます)。

詳細: VirtualBox 4.2.4 へのアップグレード (バージョンが重要かどうかは不明) をアップグレードしたばかりで、これをもう一度確認しました。

テスト用の VM を再構築したところ、さらに辛抱強くなりました。

テスト VM が実行されているように見えますが、最終的には windbg ウィンドウに何らかの出力が表示されますが、デバッグ対象の OS が起動するまでに約 15分かかります。これは、日常のカーネル デバッグには明らかに役に立ちません。なぜこれがそんなに遅くなるのかわからない.windbgの代わりにdev VMで単純な端末を実行しても、認識できるほどの速度低下はありません(もちろん、デバッグ情報はほとんどゴミです)。

何か案は?

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 に答える