1. 程式人生 > >gdb+gdbserver方式進行ARM程式除錯

gdb+gdbserver方式進行ARM程式除錯

總體介紹

遠端除錯環境由宿主機GDB和目標機除錯stub共同構成,兩者通過串列埠或TCP連線。使用 GDB標準程序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能。除錯stub是嵌入式系統中的一段程式碼,作為宿主機GDB和目標機除錯程式間的一個媒介而存在。

就目前而言,嵌入式Linux系統中,主要有三種遠端除錯方法,分別適用於不同場合的除錯工作:用ROMMonitor除錯目標機程式、用KGDB除錯系統核心和用gdbserver除錯使用者空間程式。這三種除錯方法的區別主要在於,目標機遠端除錯stub的存在形式的不同,而其設計思路和實現方法則是大致相同的。

而我們最常用的是除錯應用程式。就是採用gdb+gdbserver

的方式進行除錯。在很多情況下,使用者需要對一個應用程式進行反覆除錯,特別是複雜的程式。採用GDB方法除錯,由於嵌入式系統資源有限性,一般不能直接在目標系統上進行除錯,通常採用gdb+gdbserver的方式進行除錯。

一配置編譯及安裝下載

2. 解壓到/opt目錄下
#cd /opt
#tar xzvf /tmp/gdb-6.8.tar.gz

3. 建立配置檔案、編譯
gdb允許把編譯配置和編譯結果放到任意的目錄,因此可以在gdb目錄之外建立一個專門存放編譯結果目錄.
#cd /opt
#mkdir -p arm-gdb/build
#cd arm-gdb/build
#/opt/gdb-6.8/configure --target=arm-linux--prefix=/opt/arm-gdb
#make
#make install

--target配置gdb的目標平臺,--prefixp指定了編譯結果的存放位置,也就是安裝目錄。編譯完後可以在/opt/arm-gdb/bin目錄下找到可執行的arm-linux-gdb, arm-linux -gdbtui, arm-linux-run。 拷貝arm-linux-gdb到/usr/bin目錄
#cd /opt/arm-gdb/bin/
#cp arm-linux-gdb /usr/bin/

4. gdbserver的移植
gdbserver要用到gdb原始碼目錄下的一些標頭檔案,因此無法在gdb原始碼目錄之外編譯檔案。

進入gdb/gdbserver目錄:

[[email protected]

gdbserver]# pwd

/opt/gdb-6.8/gdb/gdbserver

[[email protected] gdbserver]#必須在gdbserver目錄下執行配置命令,此時才能用相對路徑

#./configure --target=arm-linux--host=arm-linux

(--target=arm-linux表示目標平臺,--host表示主機端執行的是arm-linux-gdb,不需要配置—prefix,因為gdbserver不在主機端安裝執行)

#makeCC=/usr/bin/arm/4.3.2/bin/arm-linux-gcc

(這一步要指定你自己的arm-linux-gcc的絕對位置,我試過相對的不行,提示make: arm-linux-gcc:Command notfound,可好多人都用的相對路徑,即直接賦值arm-linux-gcc,可採取make時傳遞引數,也可以直接修改gdbserver目錄下的Makefile檔案中的環境變數CC)

沒有錯誤的話就在gdbserver目錄下生成gdbserver可執行檔案,注意此時要更改其屬性,否則可能會出現無法訪問的情況,chmod 777gdbserver將其更改為任何人都可以讀寫執行;使用arm-linux-strip命令處理一下gdbserver,將多餘的符號資訊刪除,可讓elf檔案更精簡,通常在應用程式的最後釋出時使用;然後把它燒寫到flash的根檔案系統分割槽的/usr/bin(在此目錄下,系統可以自動找到應用程式,否則必須到gdbserver所在目錄下執行之),或通過nfsmount的方式都可以。只要保證gdbserver能在開發板上執行就行。

二、gdb+gdbserver nfs除錯流程

下面就可以用gdb+gdbserver除錯我們開發板上的程式了。在目標板上執行gdbserver,其實就是在宿主機的minicom下。連線主機和開發板.我選擇了串列埠線和網線連線起了主機和開發板連線好電源,串列埠線,網線,開啟串列埠終端.

通過NFS啟動系統後,在開發板終端輸入

# mount -t nfs-oonolock192.168.50.72:/opt/FriendlyARM/mini2440/root_qtopia  /mnt/

hello程式放在root_qtopia  下面.hello為要除錯的程式(必須-g加入除錯資訊)。

# arm-linux-gcc -g-o hello hello.c

要進行gdb除錯,首先要在目標系統上啟動gdbserver服務。在gdbserver所在目錄下輸入命令:

#cd /mnt/

#gdbserver192.168.50.72:2345 hello

192.168.50.72為宿主機IP,在目標系統的2345埠(你也可以設其他可用的值,當然必須跟主機的gdb一致)開啟了一個除錯程序,hello為要除錯的程式(必須-g加入除錯資訊)。

出現提示:

Process/mnt/hello created: pid=80

Listening on port2345

(另一個終端下)

#cd /opt/FriendlyARM/mini2440/root_qtopia  

#arm-linux-gdbhello

最後一行顯示:This GDB wasconfigured as “--hosti686pclinuxgnu,--targetarmlinux”...,如果不一致說明arm-linux-gdb有問題

說明此gdbX86Host上執行,但是除錯目標是ARM程式碼。

(gdb) target remote192.168.50.168:2345

192.168.50.168為開發板IP

Remotedebugging using 192.168.50.168:2345

[New thread 80]

[Switching to thread80]

0x40002a90 in??()

同時在minicom下提示:

Remote debugging from host192.168.50.72(gdb)

注意:你的埠號必須與gdbserver開啟的埠號一致,這樣才能進行通訊。建立連結後,就可以進行除錯了。除錯在Host端,跟gdb除錯方法相同。注意的是要用“c”來執行命令,不能用“r”。因為程式已經在TargetBoard上面由gdbserver啟動了。結果輸出是在TargetBoard端,用超級終端檢視。連線成功,這時候就可以輸入各種GDB命令如listrunnextstepbreak等進行程式除錯了。

建立連線後進行gdb遠端除錯和gdb本地除錯方法相同

相關推薦

gdb+gdbserver方式進行ARM程式除錯

總體介紹 遠端除錯環境由宿主機GDB和目標機除錯stub共同構成,兩者通過串列埠或TCP連線。使用 GDB標準程序列協議協同工作,實現對目標機上的系統核心和上層應用的監控和除錯功能。除錯stub是嵌入式系統中的一段程式碼,作為宿主機GDB和目標機除錯程式間的一個媒介而存在。 就目前而言,嵌入式Linux系統

Ubuntu下使用adb和USB連線的方式進行android裝置除錯

Ubuntu下使用adb和USB連線的方式進行android裝置除錯 摘要:Ubuntu下使用adb和USB連線的方式進行android裝置除錯1、執行命令:sudovi /etc/udev/rules.d/51-Android.rules ,建立51

linux gdb執行不下去的程式除錯方法

daemon程式一般都要停止父程序,重新設定會話,這樣的程式gdb到這裡就會結束,無法跟蹤到下一步。 要除錯這樣的程式有幾種方法: 1、這些程式一般都是有while迴圈或者等待阻塞(例如伺服器程式),這樣的話,一般的可以讓程式先執行起來,然後用gdb除錯子程式; 2、考慮另

GDB+gdbserver 編譯安裝及qtcreator除錯

一、首先要做以下準備工作:(1)主機上安裝了交叉編譯工具。(2)下載GDB安裝包,地址:http://ftp.gnu.org/gnu/gdb/             http://ftp.gnu.org/gnu/gdb/gdb-7.8.tar.xz二、安裝GDB(1)解壓原

vim gdb ddd xxgdb精彩的程式除錯

來源: ChinaUnix部落格  日期:2008.03.14 19:10 (共有0條評論) 我要評論//-------------------------------------------------------------------------------------

S3C2440 windows下使用jlink gdbserver,arm-none-eabi-gdb進行裸機程式編寫除錯

一開始是學stm32的,一直用MDK下載除錯程式,非常方便。後來轉學嵌入式Linux,在Linux下進行u-boot和Linux核心的移植,一直沒有用到硬體除錯功能,都是通過列印串列埠資訊或者led來除錯,大部分情況下能夠奏效,這也是因為u-boot和linux核心本身的程

linux應用程式除錯gdb+gdbserver

rlx平臺 在目標板子上gdbserver ip:port /bin/xxx 在pc上xxxx/xxx-linux-gdb /bin/xxx,進入gdb後target remote ip:port開

用Qt 呼叫GDB除錯 Arm程式 詳細步驟----可單步執行每一行

前言本人交叉編譯環境 Ubuntu 10.04(虛擬機器),編譯工具鏈 arm-hisiv100nptl-linux,Qt 4.8.5 ,QtCreator1.3.11、在虛擬機器Ubuntu 10.04上,安裝GDB除錯工具之前,要安裝預處理模組:sudo apt-get

arm-linux-gdb & gdbserver 遠端除錯工具的搭建與使用

     由於嵌入式系統資源有限性,一般不能直接在ARM上進行除錯,通常採用arm-linux-gdb+gdbserver的方式進行遠端除錯。Target端(ARM)使用 Gdbserver,host端(PC主機)使用arm-linux-gdb,雙方最好統一編譯工具鏈。在應用

Mac下用GDB工具進行程式除錯

GDB是GNU開源組織釋出的一個強大的UNIX下的程式除錯工具。 一般來說,GDB主要幫助你完成下面四個方面的功能[百度百科]: 啟動你的程式,可以按照你的自定義的要求隨心所欲的執行程式。 可讓被除錯的程式在你所指定的調置的斷點處停住。(斷點可以是條件表示

使用gdb+gdbserver除錯嵌入式程式

gdb+gdbserver 除錯嵌入式程式的例子 如果環境沒有提供交叉編譯程式gdbserver , 可以參考交叉編譯步驟 1.arm 上的一個程式monitorAll 是我除錯的例子, 它在客戶端的執行命令如下. ./monitorAll

GDB程式除錯工具

使用gcc/g++編譯程式時加-g選項以方便除錯。 設定系統允許產生core檔案: $ulimit -c unlimited 除錯由test程式產生的core檔案: $gdb ./test core 設定輸出資訊時的分頁功能 set pagination on # 或者 set heigh

程式實現對資料排序並按出現次數進行排序 程式實現對資料排序並按出現次數進行排序(注:用面向物件的方式實現,用for迴圈進行排序,別用comparable介面實現){1,4,2,1,3,2,1,4}作為

程式實現對資料排序並按出現次數進行排序 程式實現對資料排序並按出現次數進行排序(注:用面向物件的方式實現,用for迴圈進行排序,別用comparable介面實現){1,4,2,1,3,2,1,4}作為引數(引數可變)傳入java方法中,控制檯輸出以下結果 1出現了3次 2出現了2次

純Linux下的 ARM裸機除錯環境搭建(GDB + JLink)

說明:我也是除錯u-boot,在win下OK了,基於這裡,然後為了完全在linux下便有了下邊轉載的內容。下文會對照我自己的操作進行結果補充!感覺補充的多於轉載的就改為原創了,讓更多人看到!     一直想擺脫windows環境,在純linux下進行arm裸機開發,

怎麼對輸入引數的main(int argc , char *argv)函式進行程式除錯

       當函式使用(int argc , char *argv)來輸入引數時,我們一般都是使用cmd對函式進行呼叫,然後在函式名後面輸入函式引數。        如果相對函式進行除錯,怎麼使用VS2010輸入引數呢,下面我們介紹設定的步奏:        1.Proj

(轉載)純Linux下的 ARM裸機除錯環境搭建(GDB + JLink)

一直想擺脫windows環境,在純linux下進行arm裸機開發,但是由於一直不知道JLink如何在linux下執行和配置,一直無法進行下去。以前都是windows+AXD除錯。包括本人用的FL2440開發板和JLink偵錯程式也沒有提供在linux除錯的文件。前些天由於想

交叉編譯gdb+gdbserver實現遠端除錯

 總結一下linux下交叉編譯gdb並遠端除錯程式的知識  1.配置交叉編譯工具鏈到系統環境變數PATH下 export PATH=$PATH:'交叉編譯工具鏈的絕對路徑‘ 2.編譯主機端執行的gdb,但是處理的程式碼是arm平臺 ./configure --target=

(OK) 編譯cBPM—CentOS7—gdbgdbserver—成功—除錯

+++++++++++++編譯Criteria.Tools.Executor————成功———除錯 [[email protected] gdbserver]# pwd /opt/android-on-linux/android-ndk-r8e/prebuilt/a

Linux下CodeBlocks遠端除錯ARM程式環境搭建

Codeblocks:Release 8.02、宿主機:ubuntu10.04、開發板:嵌入式linux作業系統。 1 Codeblocks配置交叉編譯環境 如下圖所示,由上到下的選擇,1處直接選擇即可。2處是你交叉編譯器安裝位置,3 4 5 6 可以在你交叉編譯器安

Android 使用 MuMu模擬器 進行程式除錯

MuMu模擬器速度快,體積小,版本新(目前beta已到6.0),推薦使用在除錯中 本文環境: android-studio-ide-143.2739321-windows MuMu模擬器 2.0.4 android sdk 19版,即4.4 KitK