嵌入式Linux的GDB遠程調試的實(shí)現

發(fā)布時(shí)間:2010-9-3 13:08    發(fā)布者:techshare
關(guān)鍵詞: GDB , linux , 遠程調試
遠程調試環(huán)境由宿主機GDB和目標機調試stub共同構成,兩者通過(guò)串口或TCP連接。使用GDB標準程串行協(xié)議協(xié)同工作,實(shí)現對目標機上的系統內核和上層應用的監控和調試功能。調試stub是嵌入式系統中的一段代碼,作為宿主機GDB和目標機調試程序間的一個(gè)媒介而存在。

就目前而言,嵌入式Linux系統中,主要有三種遠程調試方法,分別適用于不同場(chǎng)合的調試工作:用ROM Monitor調試目標機程序、用KGDB調試系統內核和用gdbserver調試用戶(hù)空間程序。這三種調試方法的區別主要在于,目標機遠程調試stub 的存在形式的不同,而其設計思路和實(shí)現方法則是大致相同的。

而我們最常用的是調試應用程序。就是采用gdb+gdbserver的方式進(jìn)行調試。在很多情況下,用戶(hù)需要對一個(gè)應用程序進(jìn)行反復調試,特別是復雜的程序。采用GDB方法調試,由于嵌入式系統資源有限性,一般不能直接在目標系統上進(jìn)行調試,通常采用gdb+gdbserver的方式進(jìn)行調試。Gdbserver在目標系統中運行,gdb則在宿主機上運行。

行GDB調試,目標系統必須包括gdbserver程序,宿主機也必須安裝gdb程序。一般linux發(fā)行版中都有一個(gè)可以運行的gdb,但開(kāi)發(fā)人員不能直接使用該發(fā)行版中的gdb來(lái)做遠程調試,而要獲取gdb的源代碼包,針對arm平臺作一個(gè)簡(jiǎn)單配置,重新編譯得到相應gdb。gdb的源代碼包可以從http: //ftp.cs.pu.edu.tw/Linux/sourceware/gdb/releases/下載,最新版本為gdb-6.4。下載到某個(gè)目錄,筆者下載到自己的用戶(hù)目錄:/home/vicky。

下載完后,進(jìn)入/home/vicky目錄,配置編譯步驟如下:

#tar jxvf gdb-6.4-tar-bz2
#cd gdb-6.4
#./configure --target=arm-linux --prefix=/usr/local/arm-gdb -v
#make
(這一步的時(shí)候可能會(huì )有問(wèn)題,提示一個(gè)函數中(具體函數名不記得了)parse error,就是unsigned前邊多了一個(gè)”}”,你用vi進(jìn)入那一行把它刪掉就行了。)

#make install
#export PATH=$PATH:/usr/local/arm-gdb
進(jìn)入gdbserver目錄:
#./configure --target=arm-linux –host=arm-linux
#make CC=/usr/local/arm/2.95.3/bin/arm-linux-gcc
(這一步要指定arm-linux-gcc的位置,可能跟你的不一樣)

沒(méi)有錯誤的話(huà)就在gdbserver目錄下生成gdbserver可執行文件,把它燒寫(xiě)到flash的根文件系統分區,或通過(guò)nfs mount的方式都可以。只要保證gdbserver能在開(kāi)發(fā)板上運行就行。

下面就可以用gdb+gdbserver調試我們開(kāi)發(fā)板上的程序了。在目標板上運行g(shù)dbserver,其實(shí)就是在宿主機的minicom下,我的red hat linux裝在vmware下的。我是在minicom下#mount 192.168.2.100:/ /tmp后做的(這里參數-o nolock可以不加,不加這一步執行得反而更快些),hello和gdbserver都是位于linux根目錄下,把主機根目錄掛在到開(kāi)發(fā)板的/tmp 目錄下。

要進(jìn)行g(shù)db調試,首先要在目標系統上啟動(dòng)gdbserver服務(wù)。在gdbserver所在目錄下輸入命令:

(minicom下)
#cd /tmp
#./gdbserver 192.168.2.100:2345 hello
192.168.2.100為宿主機IP,在目標系統的2345端口開(kāi)啟了一個(gè)調試進(jìn)程,hello為要調試的程序。
出現提示:
Process /tmp/hello created: pid=80
Listening on port 2345  

(另一個(gè)終端下)
#cd /
#export PATH=$PATH:/usr/local/arm-gdb/bin
#arm-linux-gdb
hello
(GDB) target remote 192.168.2.223:2345(192.168.2.223為開(kāi)發(fā)板IP)

出現提示:
Remote debugging using 192.168.2.223:2345
[New thread 80]
[Switching to thread 80]
0x40002a90 in ??()
同時(shí)在minicom下提示:
Remote debugging from host 192.168.2.100(gdb)
連接成功,這時(shí)候就可以輸入各種gdb命令如list、run、next、step、break等進(jìn)行程序調試了。

以上針對通過(guò)nfs mount和tftp的方式,只能在主機上調試好后下載到開(kāi)發(fā)板上運行,如果有錯誤要反復這個(gè)過(guò)程,繁瑣不說(shuō),有些程序只能在開(kāi)發(fā)板上調試。所以筆者采用了gdbserver的遠程調試方式。希望對大家調試程序有用!
本文地址:http://selenalain.com/thread-25412-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页