- target端要build gdbserver,host端要有cross version 的gdb,我用arm-elf-gdb 和uClinux附的gdb server。
- build program時,compile option要加上 -g 選項,加入debug information。
- build時,要build出兩個file : target execution和for debug。
target debug的可以strip symbol,也可以不strip。
for debug的不能strip。也不能用elf2flt轉為flat format。要維持elf format。 - target 上run gdbserver,同時指定 host端的ip: port number,還有要load的程式:
#gdbserver 10.3.5.123:2345 testprog
process testprog created; pid = 130
Listening on port 2345
如果testprog 有argument ,直接寫在test prog後面,例如:
#gdbserver 10.3.5.123:2345 testprog -o -v 123 - host 端啟動arm-elf-gdb,並且load 測試程式的symbol (.gdb)
arm-elf-gdb testprog.gdb
(gdb) - 在host端,指定target作remote debugging..
(gdb) target remote 10.3.5.123:2345
Remote debugging using 10.3.5.123:2345
0x93880050 in _start( ) - OK,雙方連線完成,可以開始由arm-elf-gdb 控制target的動作了(作debug)。
因為gdb的source listing是以"行數"為參數,所以最好再用vi 開啟debug的source code,同時用
:set nu將line numner on,這樣就可以看到source code的line number了。
這時候,用vi 瀏覽到要設定break-point的地方,看看行數是多少,再在gdb 下b linenumber 命令設定段點:
(gdb) b 1302 --- 在1302 行 設斷點
接著用 c (continue) command 繼續執行
(gdb) c
到達break point時,他會自動停下來。
用step 執行一行指令,
用next 執行到下一行。
用clear 清除breakpoint。
用list 列出目前code的source code。
用q結束。
另外,如果有X的化,可以用gdb的圖形介面 - ddd。
用ddd作remote , cross-platform debug時,要指定debugger
#ddd --debugger arm-elf-gdb testprogram.gdb &會開啟ddd gui。畫面下方式debug command ,上面是source list。
一樣,在debug command下target command
(gdb)targe remote 10.3.123:2345
6 則留言:
求教一下:PATH 裡已有/usr/local/arm/arm-linux/bin:..
我做出GDB ./configure --target=arm-linux-prefix=/usr/local/arm-gdb
-host=i586-linux
GDB Server ./configure --target=arm-linux --host=arm-linux
然後兩邊連結起來,出現了 list沒問題
但是一用Step 跑就會出現 0x400... in ? () from /lib/ld-linux.so.2
(gdb)
case1:...
which has no line numbet information 卡死..
Case2:嘗試 set solib-absolute-prefix ../arm-linux/lib
in _start() at rtld.c:-1
-1 rtld.c: No search file or d
case3:
基本上我大概在一開始configure的時候沒有設定GDB的lib路徑 實在不知道要改甚麼了...
能不能救救我啊
keith.sun@gmail.com
No Line No.
會不會是build 的時候沒有加上 -g 選項 ?
-g 是一定有下的,畢竟-static沒問題
沒load file ok (GDB)c finished
haved set solib-absolute-prefix
set solib-search-path
$(my arm path)
ok!
在於有load symbol時
file testp 之後
again
I Can run
but>>
USING host libthread_db library "/lib/libthread_db.so.1".
(gdb) c
Program exited normally.
I still not got right LD,and mapping target shared library
any possible configure and
arm-linux-gcc -g gdb_test.c -o $(OUT_ARM)/arm_gt
我想應該問題在我沒有讓host上的file
在 compiler時期 有用到$(TARGET)/lib
compiler step could fixed error?
目前還在try nostdlib的方式
終於解決了,我換了 GDB 6.7.1
是OK的。
..XD建議不要用 GDB6.6
凸 好久
還好不用在makefile 下奇怪的 nostdlib
不然還有一堆東西要bind在一起。
謝謝啦。
哇,你真厲害 :)
你好,我目前在arm-elf-gdb遇到一些瓶頸,上網google找解答的時候,正好找到此一blog,不曉得方不方便向你提問,謝謝你。
我目前遇到的問題是,當我在用arm-elf-g++在編譯時,一定要加入-elf2flt.ld -elf2flt這兩個選項,才可以編譯成功,不加入的話,就會出現錯誤,可是加入的話,又會和你在blog上所說的有所衝突,請問要如何解決呢,謝謝你。
張貼留言