GDBの使用方法
FUJISEKKを作る。
FUJISEKK_Messaeg。
コンパイル例
[root@localhost oomagari]# arm-linux-gcc -g test.c -o test
test.c: In function `main':
test.c:2: warning: return type of 'main' is not `int'
ターゲットボ−ドで
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/
//#gdbserver <ipaddress of HOST system>:7000 <name of program
to be debugged>
#gdbserver 192.168.1.1:7000 test
#gdbserver 192.168.1.2:7000 hub-ctrlb 2=serverID
/tmp/mnt/hdd/bin/gdbserver
ホスト
x86-linux-elf/bin/gdb
にある
ファイル gdbinit の内容
********************************************************
handle SIG32 nostop
handle SIG32 noprint
target remote 192.168.1.2:7000
target remote 192.168.1.11:7000 11=targetID
set solib-search-path /usr/local/arm-linux/arm-linux/lib
set solib-absolute-prefix /dev/null
********************************************************
実行例
gdb --command=gdbinit test
gdb test
/NewOLO0920/OloRiverPDK-EngineeringRelease3.1.22/host/x86-linux-elf/bin/gdb
gdb test ”test”をデバック
main にブレークポイントを付ける
(gdb) b main
16行目にブレークポイントを付ける
(gdb) b 16
(gdb) continu
Breakpoint 1, main () at test.c:4
4
printf("Hloo Wold");
target Hloo WoldGDB Test 0: Exit
target INPUT=99
(gdb) continu
Continuing.
target 1 入力
Breakpoint 2, main () at test.c:16
16
if (idat==0) break;
(gdb) print idat
$1 = 1
(gdb) continu
Continuing.
target GDB Test 0: Exit
実行中エラーでとまった例
JPEGのデコードをしている
Program received signal SIGSEGV, Segmentation fault.
0x00401e68 in HuffmanDecode (
buff=0x4d0020 "\377リ\377", <incomplete sequence
\340>, table=1 '\001',
BlockData=0x22eebc) at djpeg.c:420
420
BlockData[zigzag_table[count]] = DataCode * TableDQT[tabledqt][count];
}else{
count += ZeroCount;
// 逆量子化+ジグザグ
420 BlockData[zigzag_table[count]] = DataCode *
TableDQT[tabledqt][count];
count ++;
}
(gdb) print TableDQT
$2 = {'\001' <repeats 64 times>, '\001' <repeats 64 times>,
同様にcount,ZeroCountもprintすると
count=74
ZeroCount=11 0xb
count +=
ZeroCount;実行前はcount=63(74-11)だった、zigzag_tableは64しか確保していないのでZeroがいくつでも64以
上にしてはいけない。