Windbg を用いたリモートデバッグ
この資料ではリモートデバッグの方法を紹介します。
リモートデバッグというのは、遠隔地からデバッガを操作してデバッグ作業を進めることです。 デバッグ対象が実行中のプロセスである(ライブデバッグ)か、あるいは、ダンプファイル等の、 いわゆるポストモーテムデバッグであるかは問いません。
遠隔地から、デバッガに接続して、ローカルでたたくのと同じようにデバッグコマンドをたたく環境を作りデバッグを行います。
マイクロソフト社内のように、全米にオフィスがあって各地のエンジニアに協力体制を依頼するときなどは、 デバッガの接続情報を送り、遠隔地からデバッグを行ったりします。
WinDbg を用いたリモートデバッグの方法
さて、では実際にリモートデバッグをするにはどうしたらよいでしょうか。 ここでは WinDbg を用いてリモートデバッグを行う方法を示します。
リモートデバッグは次の手順で行います。
- WinDbg でデバッグ対象にアタッチする (あるいはダンプファイルを開く)
- WinDbg でデバッギング・サーバーを開始する。
- リモートのデバッガからデバッギング・サーバーに接続する。
- リモートのデバッガからデバッグを行う
- デバッグセッションを終了する
- 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 を実行します。