gdbリモートデバック

CAT開発CDROM Ver2.03以降で、CAT709 CAT760 共に gdb (GNUデバッガ) によるリモートデバックに対応しました。具体的には

  • rootfs 20060722 以降に gdbserver が組み込まれています
  • coLinux rootfs.zip (2006-07-21日付以降) に sh3-linux-gdb および sh4-linux-gdb が組み込まれています

この組み合わせによって、CAT709 CAT760 のアプリケーション開発に gdb を利用することができるようになりました。また後述する SWEET を使うとより簡単にデバックが行えます。それでは実際に gdb によるリモートデバックを動かしてみましょう。

用意するもの

  • CAT709 CAT760 のrootfsを 2006-07-22以降 にアップデートする
    CAT709,CAT760に
    /usr/bin/gdbserver
    が存在することを確認する
  • 開発機の colinux を rootfs.zip (2006-07-21日付以降) にアップデートする
    開発機に
    /usr/bin/sh3-linux-gdb
    /usr/bin/sh4-linux-gdb
    が存在することを確認する
  • ネットワークの設定が行われていること。
    CAT709 CAT760 から 開発機を nfsマウントできることを確認します。

gdbリモートデバック実例

ソースコード

次のような簡単なソースコードを用意します。main.c という名前で保存します。

#include <stdio.h>
	
int main(){
	int a,b,i;
	a=5;
	b=6;

	printf("hello \n");
	for(i=0;i<10;i++){
		printf("i=%d, a=%d, b=%d\n",i,a++,b++);
	}
	printf("end\n");
}

クロスコンパイル

開発機で
$ sh4-linux-gcc -O2 -g main.c

NFSマウント

CAT709,CAT760 で
# mount 開発機のIP:/home/略   /sweet -o tcp,ro
# cd /sweet

main.cおよびa.outがあるパスを /sweet にマウントしたとします。

開発機とターゲット機 双方とも main.c と a.out ファイルがある位置をカレントディレクトリにします。

gdbserver起動

CAT709,CAT760 で
# gdbserver 開発機のIP:1234  a.out
Process a.out created; pid = 947
Listening on port 1234

開発機のIPアドレスとポート番号(この例では1234)を指定して待ち受けに入ります

リモートgdb起動

開発機で
$ sh4-linux-gdb ./a.out
(gdb) target remote CATのIPアドレス:1234

あとは通常の gdb の操作と同じです

gdb操作

リストを見る

(gdb) l
1       #include <stdio.h>
2
3       int main(){
4               int a,b,i;
5               a=5;
6               b=6;
7
8               printf("hello \n");
9               for(i=0;i<10;i++){
10                      printf("i=%d, a=%d, b=%d\n",i,a++,b++);

10行目にブレイクポイントを張る

(gdb) b 10
Breakpoint 1 at 0x4005e2: file main.c, line 10.

実行

(gdb) c
Continuing.
Breakpoint 1, main () at main.c:10
10                      printf("i=%d, a=%d, b=%d\n",i,a++,b++);

変数を見る

(gdb) print i
$1 = 0

再開

(gdb) c
Continuing.
Breakpoint 1, main () at main.c:10
10                      printf("i=%d, a=%d, b=%d\n",i,a++,b++);

このとき、CAT709 CAT760 の画面には printf()文 での実行結果が表示されます。
リモートgdbが動いていることが分かります。すばらしい。

gdbの使い方は本ページの範囲を超えます。ネット上や書籍にgdbの詳しい使い方がたくさん載っていますので参考にしてください。

SWEET

gdbは難しい・・覚える時間がない。という方には SWEET をお勧めします。SWEET は 高機能テキストエディタと、gdb等の操作を変わりに行ってくれる Windowsアプリケーションです。

SWEETについてはこちら

リンク