嵌入式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....