這篇文章主要是示範如何進行遠端除錯,所以請先下載最新版的GDB package version 6.8,我的實驗板是QT2410,toolchain為ELDK(ELDK有內建gdbtui),下載解壓縮完後,請執行下面的shell script,讓編出來的gdb可以support ARM架構,–enable-tui是讓GDB編出圖形化UI debug界面
#! /bin/sh
./configure --target=arm-linux \
--prefix=/usr/local/eldk/armgdb \
--exec-prefix=/usr/local/eldk/armgdb \
--enable-tui
編譯完後請到gdb/gdbserver資料夾下執行下面的shell script並編譯
#! /bin/sh
export PATH=$PATH:/usr/local/eldk/usr/bin/
export CPPFLAGS="-I/usr/local/eldk/arm/usr/include"
export LDFLAGS=""
export CFLAGS=""
export AR=arm-linux-ar
export AS=arm-linux-as
export LD=arm-linux-ld
export RANLIB=arm-linux-ranlib
export CC=arm-linux-gcc
export NM=arm-linux-nm
export ARCH=arm
./configure --target=arm-linux \
--host=arm-linux \
--build=arm-linux-gnu \
--prefix=/usr/local/eldk/armgdb \
--exec-prefix=/usr/local/eldk/armgdb \
這樣子我們可以得到一個可在2410上執行的gdbserver
先寫個簡單的小程式並編譯它(for example:arm-linux-gcc –ggdb –o hello hello.c),把測試程式丟到板子上再鍵入指令gdbserver 192.168.15.1:12345 hello,你會看到如下gdbserver啟動的畫面
在host端開啟我們編譯出來的gdbtui,可看到如下畫面,並輸入以下指令
(1)target remote 192.168.15.1:12345(連接遠端的gdbserver)
(2) continue到第一個中斷點時set solib-search-path /usr/local/eldk/arm/lib/(設定動態連結庫的位置),因為gdb預設的share library位置與target board相同,所以導致GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code.
詳細的gdbserver與gdb用法請參考此篇文章
留言