ネットワークケーブルを用いたカーネルデバッグ接続の設定手順
こんにちは、K里です。
今回はネットワークケーブルを用いたカーネルデバッグ接続の設定手順についてお話したいと思います。
これまでのカーネルデバッグ接続におけるインターフェースは RS-232C、IEEE1394、USB が使用されてきましたが、Windows 8 から新たにネットワークケーブルを使用したカーネルデバッグ接続が可能となりました。他のインターフェースを使用した接続状態と比較すると、ネットワークケーブルを使用した場合、ホストPC とターゲットPC がローカルネットワーク上に存在すればよいため、設置場所が制限されない(ホスト PC とターゲット PC を隣同士で並べる必要がなくなる) ことや、ホスト PC のデバッグポート数に依存することなく多くのターゲット PC を接続状態にできることが主なメリットになると思われます。
ネットワークデバッグ接続を行うための要件として、Windbg 等のデバッガを起動しデバッグを行うホスト PC は、Windows XP 以降の OS が対象となり、デバッグポートとするネットワークアダプターについては特に制限はありません。対してデバッグ対象となるターゲットPC は、Windows 8 と Windows Server 2012 のみが対象となり、また以下のネットワークアダプターについてデバッグ接続をサポートしています。
Title: Supported Ethernet NICs for Network Kernel Debugging in Windows 8
URL: https://msdn.microsoft.com/ja-JP/library/windows/hardware/hh830880
上記要件を満たすホスト PC とターゲット PC が用意できたら、以下の手順でデバッグ接続を実施します。
1. ホスト PC の IP アドレスを確認します
ホスト PC 上でコマンドプロンプトを起動し、ipconfig コマンドを実行します。ターゲット PC 上でコマンドプロンプトを起動し、ping コマンドよりホスト PC と通信可能であるか確認します。
2. ネットワークデバッグに使用するポートを決定します
ホスト PC とターゲット PC 間のデバッグポートをポート番号 49152-65535 の範囲から決定します。1 台のホスト PC に対して複数のターゲット PC を接続する場合、ターゲット PC 毎に異なるポート番号を指定します(例えばターゲット PC 1 と接続ではポート 50000 を指定し、PC 2 はポート 50001 を指定する等)。
3. ターゲット PC に対してデバッグ設定を実施します
ターゲット PC 上でコマンドプロンプトを管理者権限で起動し、以下のコマンドを実行します。/dbgsettings オプションの hostip の w.x.y.z は 1 で確認したホスト PC の IP アドレス、port の n は、2 で決定したポート番号を指定します。
bcdedit /debug on
bcdedit /dbgsettings net hostip:w.x.y.z port:n
上記 bcdedit /dbgsettings コマンドの実行結果として、デバッグ接続を行うためのキー (XXXXXX.XXXXX.XXXXX.XXXXX) が生成されますのでこちらのキーを USB メモリ等を使用してホスト PC に保存します。
またターゲット PC 上で複数のネットワークアダプターが存在する場合、以下のコマンドで busparms の b.d.f にデバッグ接続に使用するアダプターの PCI bus、device、function 番号を指定します。PCI bus、device、function 番号についてはデバイスマネージャーで対象アダプタ-のプロパティより確認できます。
bcdedit /set {dbgsettings} busparams b.d.f
上記設定後、ターゲット PC を再起動します。
4. ホストPC からデバッグセッションを開始します
Windbg を起動し、メニュー [File] - [Kernel Debug] から 2 で決定したポート番号と 3 で生成されたキー情報を入力し OK をクリックします。なお最新版の Windbg の入手方法については以下をご覧ください。
Title: Windows 用デバッグ ツールのダウンロードとインストール
URL: https://msdn.microsoft.com/ja-jp/windows/hardware/gg463009.aspx
デバッガ上に以下のメッセージが表示され、ブレークインできれば接続完了となります。
Microsoft (R) Windows Debugger Version 6.2.9200.20512 X86
Copyright (c) Microsoft Corporation. All rights reserved.
Using NET for debugging
Opened WinSock 2.0
Waiting to reconnect...
Connected to target w.x.y.z on port 50000 on local IP a.b.c.d.
Connected to Windows 8 9200 x64 target at (Wed Dec 26 20:24:36.627 2012 (UTC + 9:00)), ptr64 TRUE
Kernel Debugger connection established.
:
(snip)
因みに上記設定をコマンドから行う場合は以下のようになり、ターゲット PC 毎にデバッガ起動用のショートカットファイルを作成しておくと便利です。下記 port の n にポート番号、key にキー情報を入力します。
windbg.exe -k net:port=n,key=XXXXXX.XXXXX.XXXXX.XXXXX
それではよいお年を。
Appendix
Title: Setting Up Kernel-Mode Debugging over a Network Cable Manually
URL: https://msdn.microsoft.com/en-us/library/hh439346(v=vs.85).aspx