要約すると、 ユーザ・プログラムをデバッグする準備が整った後、 以下の手順に従わなければなりません。
getDebugChar
,putDebugChar
,flush_i_cache
,memset
,exceptionHandler
.
set_debug_traps(); breakpoint();
exceptionHook
という変数を提供する必要があります。
通常は、
以下のように使います。
void (*exceptionHook)() = 0;
しかし、
set_debug_traps
が呼び出される前に、
ユーザ・プログラム内のある関数を指すようこの変数を設定すると、
トラップ
(例えば、
バス・エラー)
で停止した後にGDBが処理を継続実行するときに、
その関数が呼び出されます。
exceptionHook
によって指される関数は、
1つの引数付きで呼び出されます。
それは、
int
型の例外番号です。
次にtarget remote
コマンドを使って通信を確立します。
引数には、
シリアル回線に接続された装置名または
(通常はターゲットと接続されたシリアル回線を持つ端末サーバの)
TCPポートを指定することで、
ターゲット・マシンとの通信方法を指定します。
例えば、
/dev/ttybという名前の装置に接続されているシリアル回線を使うには、
target remote /dev/ttyb
とします。
TCP接続を使うには、
host:
portという形式の引数を使用します。
例えば、
manyfarms
という名前の端末サーバのポート2828に接続するには、
target remote manyfarms:2828
とします。
ここまでくると、 データの値の調査、 変更、 リモート・プログラムのステップ実行、 継続実行に通常使用するすべてのコマンドを使用することができます。
リモート・プログラムの実行を再開し、
デバッグするのをやめるには、
detach
コマンドを使います。
GDBがリモート・プログラムを待っているときにはいつでも、 割り込み文字 (多くの場合 <C-C>) を入力すると、 GDBはそのプログラムを停止しようとします。 これは成功することも失敗することもありますが、 その成否は、 リモート・システムのハードウェアやシリアル・ドライバにも依存します。 割り込み文字を再度入力すると、 GDBは以下のプロンプトを表示します。
Interrupted while waiting for the program. Give up (and stop debugging it)? (y or n)
ここでyを入力すると、 GDBはリモート・デバッグ・セッションを破棄します (後になって再実行したくなった場合には、 接続するために‘target remote’を再度使用します)。 nを入力すると、 GDBは再び待ち状態になります。