Howto

GDB serverを使う(Armadillo-J)

Armadillo-J上で gdbserver を動作させ、開発用PC上の gdb と通信させることで、リモートデバッグが可能になります。

1. ホスト用GDBの作成

GDBプロジェクトから、最新のGDBソースコードを取得します。以下の手順で、取得したソースコードを展開してコンパイルを行います。

 [PC ~]$ tar zxvf gdb-x.x.tar.gz
 [PC ~]$ cd gdb-x.x
 [PC gdb-x.x]$ ./configure --target=arm-elf --prefix=/usr/local/gdb/
 [PC gdb-x.x]$ make
 [PC gdb-x.x]$ sudo make install

(※最後のコマンドに失敗する場合は、rootユーザで最後のコマンドを実行して下さい)
以上で、/usr/local/gdb/bin/ 配下に arm-elf-gdb が作成されます。

2. gdbserverの作成

(※ uClinux-distのバージョンが 2004/06/10 以前のものでは、gdbserverが正常に動作しません。最新版をダウンロードして下さい)
開発用PCで、uClinux-distディレクトリに移動後、make menuconfig とコマンド入力してコンフィギュレーション画面を起動します。

画面の起動後

 [ ] Customize Vendor/User Settings (NEW)

をチェックして保存・終了します。

次に起動した画面で、

 Miscellaneous Applications  --->
    [ ] gdbserver

を選択して保存・終了します。

make コマンドを実行すると、uClinux-dist/romfs/bin/ 配下に gdbserver が作成されます。

3. リモートデバッグの実行

ここでは、
・Armadillo-JのIPアドレス "192.168.1.100"
・開発用PCのIPアドレス "192.168.1.10"
・デバッグ時のポート番号 "9876"
として説明します。

まず、デバッグ対象のプログラムを作成します。「サンプルプログラムの作成」を参照してプログラムを作成して下さい。(この時デバッグ用シンボルを作成するため、Makefile の CONFIG_USER_DEBUG 行を有効にしてから、コンパイルして下さい。)

コンパイルが終了すると、sample と sample.gdb という二つのファイルが作成されますが、sample はArmadillo-Jで、sample.gdb は開発用PC上で使用します。 gdbserver と デバッグ対象プログラムを Armadillo-Jにファイル転送し、実行権を与えてからgdbserverを実行します。

 [armadillo /home/ftp/pub]# chmod +x gdbserver sample
 [armadillo /home/ftp/pub]# ./gdbserver 192.168.1.10:9876 ./sample

次に、開発用PC上で arm-elf-gdb を起動し、gdbserverと接続します

 [PC ~]$ /usr/local/gdb/bin/arm-elf-gdb sample.gdb
 GNU gdb x.x
 <中略>
 (gdb) target remote 192.168.1.100:9876
 
 Remote debugging using 192.1681.100:9876
 0x005c0050 in _start ()

ブレイクポイントを設定して、継続実行します。

 (gdb) b main
 Breakpoint 1 at 0x5c0078: file sample.c, line 4.
 (gdb) c
 Continuing.  
 
 Breakpoint 1, main (argc=0, argv=0xa8) at sample.c:4
 4             printf("Hello world!\n");
 (gdb)