Next: NetWare, Previous: Protocol, Up: Remote Serial
gdbserver
プログラムの使用gdbserver
は、
UNIX系システム用の制御プログラムで、
これにより、
通常のデバッグ用スタブをリンクすることなく、
target remote
コマンドによって、
ユーザ・プログラムをリモートのGDBに接続することができます。
gdbserver
は、
デバッグ用スタブに完全に取って代わるものではありません。
gdbserver
は、
GDBが必要とするのと同様のオペレーティング・システムの機能を基本的には必要とするからです。
実際、
リモートのGDBと接続するためにgdbserver
を実行できるシステムであれば、
GDBをローカルに実行することも可能です。
それでも、
gdbserver
はGDBと比較するとかなりサイズが小さいので、
便利なことがあります。
また、
gdbserver
の移植はGDB全体の移植よりも簡単なので、
gdbserver
を使うことで、
新しいシステムでの作業をより早く開始することができます、
最後に、
リアル・タイム・システムの開発をしている場合、
リアル・タイムな操作に関わるトレードオフのために、
例えばクロス・コンパイルなどによって、
他のシステム上で可能な限り多くの開発作業を行ったほうが便利であるということがあるでしょう。
デバッグ作業に関しても、
gdbserver
を使うことでこれと同じような選択を行うことができます。
GDBとgdbserver
は、
シリアル回線またはTCP接続を経由して、
標準的なGDBリモート・シリアル・プロトコルによって通信します。
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ポートでなければ、
任意の番号をポート番号として選択できます
(例えば、
23
はtelnet
に予約されています)
1。
ここで指定したのと同じポート番号を、
ホスト上のGDBのtarget remote
コマンドで使わなければなりません。
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’のような内容です。