嵌入式linux的gdb除錯環境由host和target兩部分組成,host端使用arm-linux-gdb,target board端使用gdbserver。除錯時,應用程式在嵌入式目標系統上執行,而gdb除錯在host端。gdb除錯的時候,pc機上的gdb向開發板上的gdbserver發出命令,而開發板上的gdbserver就會向應用程式發出訊號,使應用程式停下來或者完成其他一些工作!一般linux發行版中都有乙個可以執行的gdb,但開發人員不能直接使用該發行版中的gdb來做遠端除錯,而要獲取gdb的源**包,針對arm 平台作乙個簡單配置,重新編譯得到相應gdb。
#tar xvzf gdb-6.6.tar.gz
#cd gdb-6.6
#./configure –target=arm-linux –prefix=/usr/local/arm-gdb -v (注意此時是root登陸,因為安裝目錄在/usr/local)
(–target配置gdb的目標平台,–prefix配置安裝路徑,當然其他路徑也可以,跟下面配置一致即可,須在環境變數中宣告,啟動arm-linux-gdb需要,可更改/etc/profile或~/.bash_profile或~/.bashrc,新增:
export path=$path:/usr/local/arm-gdb/bin,這樣可以找到路徑)
#make
#make install(生成arm-linux-gdb,並存入/usr/local/arm-gdb/bin/,查詢確認下;或者也可以啟動arm-linux-gdb,若成功,則證明安裝無誤)
2,編譯gdbserver
首先要進入gdb-6.6/gdb/gdbserver這個目錄
#./configure –target=arm-linux –host=arm-linux
(–target=arm-linux表示目標平台,–host表示主機端執行的是arm-linux-gdb,不需要配置–prefix,因為gdbserver不在主機端安裝執行)
#make cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc ;這一步是指定arm-linux-gcc的絕對路徑,注意,是絕對路徑。如果沒有錯誤的話就會在gdbserver的目錄下生成gdbserver的可執行檔案,注意此時要更改其屬性,否則可能會出現無法訪問的情況,
#chmod 777 gdbserver將其更改為任何人都可以讀寫執行;
#arm-linux-strip gdbserver;使用此命令處理一下gdbserver,將多餘的符號資訊刪除,可讓elf檔案更精簡,通常在應用程式的最後發布時使用;然後把它燒寫到flash的根檔案系統分割槽的/usr/bin(在此目錄下,系統可以自動找到應用程式,否則必須到gdbserver所在目錄下執行之),或通過nfs mount的方式都可以。只要保證gdbserver能在開發板上執行就行。
3. gdb+gdbserver 除錯流程
交叉編譯,帶引數-gstabs或-g加入除錯資訊。加入要除錯的程式是helloworld:
$arm -linux-gcc -g helloworld.c -o helloworld
然後將生成的可執行檔案拷到開發板;
在目標板上:helloworld是欲除錯程式,它和gdbserver在同乙個目錄下,192.168.177.71是宿主機的ip
此時gdbserver開始監聽2345埠;這個埠號應該是用來和宿主機進行通訊;
在宿主機上,#export path=$path:/usr/local/arm-gdb/bin
#arm-linux-gdb helloworld ;圖中192.168.177.102為目標板的ip
gdbserver中run命令不能用,可以使用continue, break, print, next, step, list, 等
注:幾個常用的除錯命令
(1)l:列出所有源**
(2)break main:在main處打斷點
break test_debug.c:11:在test_debug.c的11行打斷點
(3)c:執行到斷點處
(4)step:單步執行
(5)next:單步執行,但是step會進入函式裡面,但是next不會
(6)print a:列印a這個變數的值
(6)quit:退出,輸入此命令則開發板上的gdbserver也退出
總之總之就是,先把要除錯的程式在目標班上./gdbserver 然後在宿主機上arm-linux-gdb helloworld 進入gdb除錯的介面;
建立鏈結後,就可以通訊,然後開始除錯!
gdb和gdbserver的安裝和使用
一 遠端除錯環境由宿主機gdb和目標機除錯stub共同構成,兩者通過串列埠或tcp連線。使用gdb標準遠端序列協議協同工作,實現對目標機上的系統核心和上 層應用的監控和除錯功能。除錯stub是嵌入式系統中的一段 作為宿主機gdb和目標機除錯程式間的乙個媒介而存在。就目前而言,嵌入式 linux系統中...
使用GDB和GDBServer除錯程式
2019年02月26日 10 26 55 siemens xp 閱讀數 61 硬體平台,ti am3352 目標板ip192.168.0.15 宿主機ip 192.168.0.55 軟體平台,ubuntu 交叉編譯器 arm linux gnueabihf gcc 選擇版本為gdb 7.7.1 ta...
交叉編譯gdb與gdbserver
一 編譯gdb 543 cd home rock pkg gdb 7.3.1 544 mkdir build 553 configure host i686 pc linux gnu target arm linux prefix home rock pkg gdb 7.3.1 build 554 ...