GDB 在arm開發板上的遠端除錯

2021-08-27 16:27:13 字數 2107 閱讀 2484

嵌入式linux的gdb除錯環境由host和target兩部分組成,host端使用arm-linux-gdb,target board端使用gdbserver。除錯時,應用程式在嵌入式目標系統上執行,而gdb除錯在host端。

一、編譯安裝gdb+gdbserver

這是我的編寫的編譯指令碼:

#!/bin/sh

rundir=$(

pwd)

tarxvf gdb-6.7.1.tar.bz2

mkdirgdbserv-build

mkdirgdb-arm-linux-build

#編譯arm-linux-gdb

cdgdb-arm-linux-build

cc=cc ../gdb-6.7.1/configure --target=arm-linux --prefix=$rundir/gdb_install/gdb-arm-linux

make

makeinstall

#交叉編譯gdbserver

cd../gdbserv-build/

cc=arm-linux-gcc ../gdb-6.7.1/gdb/gdbserver/configure --host=arm-linux --prefix=$rundir/gdb_install/gdbserv

make

makeinstall

cd..

rmgdbserv-build -rf

rmgdb-arm-linux-build -rf

rmgdb-6.7.1 -rf

二、除錯使用:

1、交叉編譯,帶引數-g加入除錯資訊。

假設要除錯的程式為test.c。

#> arm-linux-gcc -g test.c -o test

2、在target board開啟gdbserver

#> gdbserver  :port test

#> gdbserver 192.168.0.1:2234 test

gdbserver開始監聽2345埠(你也可以設其他的值),然後啟動test,你會看到「process test created:pid=88」

3、回到host端

#> arm-linux-gdb /mnt/nfs/test

最後一行顯示:this gdb was configured as 「--host=i686-pc-linux-gnu,--target=arm-linux」...

說明此gdb在x86的host上執行,但是除錯目標是arm**。

(gdb)target remote :port

gdb> target remote 192.168.0.12:2234

注意:你的埠號必須與gdbserver開啟的埠號一致,這樣才能進行通訊。

建立鏈結後,就可以進行除錯了。除錯在host端,跟gdb除錯方法相同。注意的是要用「c」來執行命令,不能用「r」。因為程式已經在target board上面由gdbserver啟動了。結果輸出是在target board端,用超級終端檢視。

注意: 你可能會遇到主機和arm板都連同了但是卻沒有除錯資訊!

你可以在pc機端

gdb> symbol-file ../test (呼叫除錯資訊)

或者是:

#> ./arm-linux-gdb ../test

備註:就是要在開發板和pc主機上都要有執行的檔案,除錯資訊是從本地的檔案(../test)提取的!

讓QT跑在ARM開發板上

前幾個星期為了搭建乙個android跑qt的編譯環境,由於不熟悉android開發的環境,什麼jdk,ndk,sdk,ant一大堆全沒聽過的名詞開始出現,即使有大神的書做參考,花了兩天的時間還是沒能在windows上面搭建出來,最後在linux上quest花了不到兩個小時就搞定,也不知道是什麼原因。...

gdb遠端除錯目標開發板

本筆記基於韋東山的教程,目的通過gdb去除錯目標板上核心的執行。1.確保三者能夠ping通。2.修改目標板uboot命令引數 為3.輸入命令 nfs 0x31000000 10.196.169.work nfs root uimage bootm 0x31000000 使用命令之前把linux核心放...

開發板上如何使用GDB

嵌入式linux的gdb除錯環境由host和target兩部分組成,host端使用arm linux gdb,target board端使用gdbserver。除錯時,應用程式在嵌入式目標系統上執行,而gdb除錯在host端。一 編譯安裝gdb gdbserver tar xvzf gdb 6.6....