Windbg を用いたリモートデバッグ

この資料ではリモートデバッグの方法を紹介します。

リモートデバッグというのは、遠隔地からデバッガを操作してデバッグ作業を進めることです。 デバッグ対象が実行中のプロセスである(ライブデバッグ)か、あるいは、ダンプファイル等の、 いわゆるポストモーテムデバッグであるかは問いません。

遠隔地から、デバッガに接続して、ローカルでたたくのと同じようにデバッグコマンドをたたく環境を作りデバッグを行います。

マイクロソフト社内のように、全米にオフィスがあって各地のエンジニアに協力体制を依頼するときなどは、 デバッガの接続情報を送り、遠隔地からデバッグを行ったりします。

WinDbg を用いたリモートデバッグの方法

さて、では実際にリモートデバッグをするにはどうしたらよいでしょうか。 ここでは WinDbg を用いてリモートデバッグを行う方法を示します。

リモートデバッグは次の手順で行います。

  1. WinDbg でデバッグ対象にアタッチする (あるいはダンプファイルを開く)
  2. WinDbg でデバッギング・サーバーを開始する。
  3. リモートのデバッガからデバッギング・サーバーに接続する。
  4. リモートのデバッガからデバッグを行う
  5. デバッグセッションを終了する
  6. WinDbg を終了する

まずは WinDbg でデバッグをローカルでのデバッグと同様に開始します。

WinDbg でデバッギング・サーバーを開始します。 デバッギング・サーバーはリモートデバッガからのネットワーク接続を待ち受け、 デバッグコマンドの受け口となります。プロトコルは tcp、名前付きパイプ等が選べます。

ここでは tcp の 9999 番ポートでデバッギング・サーバーを開始しましょう。

コマンドは次の通りです。

> .server tcp:port=9999

このコマンドで次のスクリーンショットのようになれば、デバッギングサーバーが開始しています。

リモートデバッグ

次にリモート側のデバッガから、今開始したデバッギングサーバーに接続しましょう。

リモート側はここでは cdb を利用してみます。もちろん WinDbg でも接続可能です。コマンドは次の通りです。

>cdb -remote tcp:server=keisukeo-pc,port=9999

すると次のように表示されて、リモートに接続できたことがわかります。

>cdb -remote tcp:server=keisukeo-pc,port=9999
Connected to server with 'tcp:server=keisukeo-pc,port=9999'

Microsoft (R) Windows Debugger Version 6.12.0002.633 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.

Server started.  Client can connect with any of these command lines
0: <debugger> -remote tcp:Port=9999,Server=KEISUKEO-PC
KEISUKEO-PC\KEISUKEO (tcp 192.168.1.4:63827) connected at Sun Oct...
0:002>

この状態でリモートからデバッグコマンドが実行できます。

例えばリモートから kv コマンドを実行したとします...

リモートデバッグ

すると、このようにデバッギングサーバー側で確かに実行されたことがわかります。

リモートデバッグ

デバッギング・セッションを終了して、リモートデバッガの接続を終了するには、Ctrl+B を実行します。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Web/DB プログラミング徹底解説