全部博文(185)
分类: LINUX
2008-11-13 20:50:58
寫這篇文章時突然想起一位很久不見的朋友,他是我工作第一年的夥伴,這位好友令我印象最深刻的是他使用GDB的技巧,那時是我第一次看到process可以 被attach,signal可以被攔截...等諸如此類的特技表演,我那位朋友對gdb的熟練度可能比吃飯還高,也多虧他的幫忙,讓我瞭解除了 printf以外的其它debug好招
這篇文章主要是示範如何進行遠端除錯,所以請先下載最新版的,我的實驗板是QT2410,toolchain為ELDK(ELDK有內建gdbtui),下載解壓縮完後,請執行下面的shell script,讓編出來的gdb可以support ARM架構,--enable-tui是讓GDB編出圖形化UI debug界面
編譯完後請到gdb/gdbserver資料夾下執行下面的shell script並編譯
這樣子我們可以得到一個可在2410上執行的gdbserver
先寫個簡單的小程式並編譯它(for example:arm-linux-gcc –ggdb –o hello hello.c),把測試程式丟到板子上再鍵入指令gdbserver 192.168.15.1:12345 hello,你會看到如下gdbserver啟動的畫面
在host端開啟我們編譯出來的gdbtui,可看到如下畫面,並輸入以下指令
(1)target remote 192.168.15.1:12345(連接遠端的gdbserver)
(2)
continue到第一個中斷點時set solib-search-path
/usr/local/eldk/arm/lib/(設定動態連結庫的位置),因為gdb預設的share library位置與target
board相同,所以導致GDB will be unable to debug shared library initializers and
track explicitly loaded dynamic code.
詳細的gdbserver與gdb用法請參考