Next: , Previous: Bootstrapping, Up: Remote Serial


13.4.1.3 ここまでのまとめ

要約すると、 ユーザ・プログラムをデバッグする準備が整った後、 以下の手順に従わなければなりません。

  1. 下位レベルのサポート・ルーチンがあることを確認します (see What you must do for the stub)。
              getDebugChar, putDebugChar,
              flush_i_cache, memset, exceptionHandler.
    
  2. ユーザ・プログラムの先頭付近に以下の行を挿入します。
              set_debug_traps();
              breakpoint();
    
  3. 680x0のスタブに限り、 exceptionHookという変数を提供する必要があります。 通常は、 以下のように使います。
              void (*exceptionHook)() = 0;
    

    しかし、 set_debug_trapsが呼び出される前に、 ユーザ・プログラム内のある関数を指すようこの変数を設定すると、 トラップ (例えば、 バス・エラー) で停止した後にGDBが処理を継続実行するときに、 その関数が呼び出されます。 exceptionHookによって指される関数は、 1つの引数付きで呼び出されます。 それは、 int型の例外番号です。

  4. ユーザ・プログラム、 ターゲット・アーキテクチャ用のGDBデバッグ・スタブ、 サポート・サブルーチンをコンパイルしリンクします。
  5. ターゲット・マシンとGDBホストとの間がシリアル接続されていることを確認します。 また、 ホスト上のシリアル・ポートの名前を調べます。
  6. ターゲット・マシンにユーザ・プログラムをダウンロードし (あるいは、 製造元の提供する手段によってターゲット・マシンにユーザ・プログラムを持っていき)、 起動します。
  7. リモート・デバッグを開始するには、 ホスト・マシン上でGDBを実行し、 リモート・マシン上で実行中のプログラムを実行ファイルとして指定します。 これにより、 ユーザ・プログラムのシンボルとテキスト域の内容を見つける方法がGDBに通知されます。

    次に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は再び待ち状態になります。