在開發過程中有很多問題如果用gdb進行除錯跟蹤會大大提高效率,但是我發現不少同事對於gdb除錯概念比較模糊,特別是跨平台的除錯,以至於放棄用gdb除錯而影響排除bug的效率。
因此我這裡主要對跨平台除錯做乙個簡要的說明。
我們對機頂盒上的軟體進行除錯主要有兩種方式,本地除錯和遠端除錯。
遠端除錯還有乙個問題,就是關於so庫。大家編譯環境如果是linux平台,那麼按照上面的方法開始除錯的時候會發現,gdb載入的庫是本機上/lib下面的庫,而不是對應盒子上的庫,因而造成對庫裡面的函式顯示不正確,嚴重影響除錯結果的準確性,因此需要在執行c之前,設定一下lib庫的正確路徑:
set solib-absolute-prefix /opt/rosewood/dbox2/cdk/powerpc-tuxbox-linux-gnu
這樣gdb載入庫檔案就會在/opt/rosewood/dbox2/cdk/powerpc-tuxbox-linux-gnu/lib下面去找了。我們可以把這個設定命令寫到gdb執行目錄下的.gdbinit檔案裡面,gdb每次啟動會自動讀取當前目錄下的.gdbinit並執行。
我們盒子上還缺少乙個進行多執行緒除錯必須用到的libthread_db庫,,雖然/opt/rosewood/dbox2/cdk/powerpc-tuxbox-linux-gnu/lib下面有這個庫,但是經過試驗並不能正常使用,而且libthread_db和libpthread版本必須一致,因此大家可以用附件中的libthread_db和libpthread覆蓋盒子上/lib下相應的檔案。
盒子上進行本機除錯的gdb是/opt/rosewood/dbox2/cdkroot/bin/gdb,檔案很大,如果要放到盒子上,可以先strip。
進行遠端除錯用的cygwin下的gdb和linux下的gdb,以及對應版本的gdbserver我這裡都有,如果需要可以找我。注意,普通的gdb是不能遠端除錯ppc程式的。
另外,我這裡也有cygwin下面的交叉編譯環境,對於安裝vmware記憶體特別緊張,或者不方便進入linux下工作而又需要有自己的編譯環境的同事特別有用,如果有需要也可找我。
最後,需要注意的是mount nfs的時候一定要加-o nolock引數,否則會嘗試建立檔案鎖,但盒子的nfs並不支援檔案鎖,嘗試檔案鎖的超時時間大概是20分鐘,所以不加-o nolock引數mount會20分鐘才成功。
我希望我寫的這個東西能起到拋磚引玉的作用,希望大家都能講講自己開發時候的經驗,提高大家的工作效率。同時,我所寫的某些方法只是多種方法中的一種,也許有其他更適合的方法,如有補充,請不吝告知。如果大家有問題,也可以一起**
嵌入式系統 GDB除錯
心得體會 gdb gdb全稱 gnu debugger,是gnu工程為gnu作業系統開發的偵錯程式。它可以用於除錯c c objective c pascal ada等語言編寫的程式。被除錯的程式可以跟gdb執行於同一臺電腦,也可執行於不同電腦。file 裝入想要除錯的可執行檔案 kill 終止正在...
Linux Ubuntu 下嵌入式gdb除錯環境
2.安裝gdb 1 解壓 tar xjf gdb 7.8.tar.gz 2 進入到解壓好的gdb目錄中 cd gdb 7.8 3 配置為arm架構 configure target arm linux 4 修改 gdb remote.c,否則會出現 remote g packet reply is ...
嵌入式偵錯程式 GDB
使用gcc除錯c程式時,只能依靠gcc發出的警號或錯誤資訊來進行,所以除錯的效率非常低。為此,gnu開發了gdb偵錯程式。gdb的除錯功能非常強大,甚至可以和visual c 等開發工具箱媲美。但gdb的缺點是沒有圖形除錯介面。儘管如此,對於從事嵌入式linux應用開發的人員還是有必要知道gdb的使...