次: Bootstrapping, 上: Remote Serial
各アーキテクチャ用のデバッグ・スタブは、 3つのサブルーチンを提供します。
set_debug_trapshandle_exceptionが実行されるよう設定します。
ユーザ・プログラムは、
その先頭付近でこのサブルーチンを明示的に呼び出さなければなりません。
handle_exceptionhandle_exceptionが実行されるよう設定されます。
ユーザ・プログラムが実行中に
(例えば、ブレイクポイントで)
停止すると、
handle_exceptionが制御権を獲得し、
ホスト・マシン上のGDBとの通信を行います。
これが、
通信プロトコルが実装されている部分です。
handle_exceptionは、
ターゲット・マシン上でGDBの代理として機能します。
それはまず、
ユーザ・プログラムの状態に関する情報を要約して送ることから始めます。
次に、
GDBが必要とする情報を入手して転送する処理を継続します。
これは、
ユーザ・プログラムの実行を再開させるようなGDBコマンドが実行されるまで続きます。
そのようなコマンドが実行されると、
handle_exceptionは、
制御をターゲット・マシン上のユーザ・コードに戻します。
breakpointhandle_exceptionに、
つまり事実上GDBに渡されます。
マシンによっては、
シリアル・ポートから文字を受け取るだけでトラップが発生することもあります。
このような場合には、
ユーザ・プログラム自身からbreakpointを呼び出す必要はなく、
ホストのGDBセッションから`target remote'を実行するだけで制御を得ることができます。
これらのどのケースにも該当しない場合、
あるいは、
デバッグ・セッションの開始箇所としてあらかじめ決めてあるところでユーザ・プログラムが停止することを
単に確実にしたいのであれば、
breakpointを呼び出してください。