Next: , Previous: Protocol, Up: Remote Serial


13.4.1.5 gdbserverプログラムの使用

gdbserverは、 UNIX系システム用の制御プログラムで、 これにより、 通常のデバッグ用スタブをリンクすることなく、 target remoteコマンドによって、 ユーザ・プログラムをリモートのGDBに接続することができます。

gdbserverは、 デバッグ用スタブに完全に取って代わるものではありません。 gdbserverは、 GDBが必要とするのと同様のオペレーティング・システムの機能を基本的には必要とするからです。 実際、 リモートのGDBと接続するためにgdbserverを実行できるシステムであれば、 GDBをローカルに実行することも可能です。 それでも、 gdbserverはGDBと比較するとかなりサイズが小さいので、 便利なことがあります。 また、 gdbserverの移植はGDB全体の移植よりも簡単なので、 gdbserverを使うことで、 新しいシステムでの作業をより早く開始することができます、 最後に、 リアル・タイム・システムの開発をしている場合、 リアル・タイムな操作に関わるトレードオフのために、 例えばクロス・コンパイルなどによって、 他のシステム上で可能な限り多くの開発作業を行ったほうが便利であるということがあるでしょう。 デバッグ作業に関しても、 gdbserverを使うことでこれと同じような選択を行うことができます。

GDBとgdbserverは、 シリアル回線またはTCP接続を経由して、 標準的なGDBリモート・シリアル・プロトコルによって通信します。

ターゲット・マシンでは:
デバッグしたいプログラムのコピーが1つ必要です。 gdbserverはユーザ・プログラムのシンボル・テーブルを必要とはしませんので、 スペースの節約が必要であれば、 プログラムをストリップすることができます。 ホスト・システム上のGDBが、 シンボルに関するすべての処理を実行します。

gdbserverを使うには、 GDBとの通信方法、 ユーザ・プログラムの名前、 ユーザ・プログラムへの引数を教えてやる必要があります。 構文は、 以下のとおりです。

          target> gdbserver comm program [ args ... ]

commは (シリアル回線を使うための) 装置名、 あるいは、 TCPのホスト名とポート番号です。 例えば、 ‘foo.txt’という引数を指定してEmacsをデバッグし、 シリアル・ポート/dev/com1経由でGDBと通信するには、 以下のように実行します。

          target> gdbserver /dev/com1 emacs foo.txt

gdbserverは、 ホスト側のGDBが通信してくるのを受動的に待ちます。

シリアル回線の代わりにTCP接続を使うには、 以下のようにします。

          target> gdbserver host:2345 emacs foo.txt

前の例との唯一の違いは第1引数です。 これは、 ホストのGDBとTCPによって接続することを指定しています。 ‘host:2345’は、 マシン‘host’からローカルのTCPポート2345へのTCP接続をgdbserverが期待していることを意味します (現在のバージョンでは、 ‘host’の部分は無視されます)。 ターゲット・システム上で既に使われているTCPポートでなければ、 任意の番号をポート番号として選択できます (例えば、 23telnetに予約されています) 1。 ここで指定したのと同じポート番号を、 ホスト上のGDBのtarget remoteコマンドで使わなければなりません。

GDBのホスト・マシンでは:
GDBはシンボル情報、 デバッグ情報を必要とするので、 ストリップされていないユーザ・プログラムのコピーが必要です。 通常どおり、 第1引数にユーザ・プログラムのローカル・コピーの名前を指定してGDBを起動します (シリアル回線の速度が9600 bps以外であれば、 ‘--baudオプションも必要になります)。 その後、 target remoteコマンドによってgdbserverとの通信を確立します。 引数には、 装置名 (通常は/dev/ttybのようなシリアル装置)、 または、 host:PORTという形式でのTCPポート記述子を指定します。 例えば、
          (gdb) target remote /dev/ttyb

では、 シリアル回線/dev/ttybを介してgdbserverと通信します。 また、

          (gdb) target remote the-target:2345

では、 ホストthe-target上のポート2345に対するTCP接続によって通信します。 TCP接続を使う場合には、 target remoteコマンドを実行する前に、 gdbserverを起動しておかなければなりません。 そうしないと、エラーになります。 エラー・テキストの内容はホスト・システムによって異なりますが、 通常は‘Connection refused’のような内容です。


脚注

[1] 原注:他のサービスによって使用されているポート番号を選択すると、 gdbserverはエラー・メッセージを出力して終了します。