GDB遠端除錯

2021-06-10 12:52:54 字數 1728 閱讀 2650

3. 建立配置檔案、編譯

gdb允許把編譯配置和編譯結果放到任意的目錄,因此可以在gdb目錄之外建立乙個專門存放編譯結果的目錄。

#cd /opt

#mkdir -p arm-gdb/build

#cd arm-gdb/build

#/opt/gdb-6.6/configure --target=arm-linux --prefix=/opt/arm-gdb

#make

#make install

prefix指定了編譯結果的存放位置,也就是安裝目錄。

如果在編譯arm-linux-low.c這個檔案時提示找不到 「sys/reg.h」,則修改arm-linux-low.c,注釋掉#include "sys/reg.h"。

編譯完後可以在/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原始碼目錄之外編譯檔案。

#cd /opt/gdb-6.6/gdb/gdbserver

#/opt/gdb-6.6/configure --host=arm-linux --target=arm-linux --prefix=/opt/arm-gdb/gdbserver

#make

#make install

5. 使用gdbserver

在目標板上執行gdbserver

在目標板上執行

#./gdbserver 192.168.0.2:2345 hello

其中192.168.0.2為目標板的ip。2345為gdbserver開啟的埠,可以自己設定。

6. 執行gdb客戶端

#./arm-linux-gdb hello

(gdb)target remote 192.168.0.2:2345

(gdb) list

1 #include

2 #include

34 int main()

5 (gdb)b main

(gdb)c

7. gdb的基本指令:

load:裝入乙個程式

symbol-file:裝入符號庫檔案,可以是用-g引數編譯的可執行檔案。

f(ile):指定乙個可執行檔案進行除錯,gdb將讀取些檔案的除錯訊息,如f a.exe

l(ist):列程式出原始檔

r(un) :裝載完要除錯的可執行檔案後,可以用run命令執行可執行檔案

b(reak):設定斷點(break point),如b 25,則在源程式的第25行設定乙個斷點,當程式執行到第25行時,就會產生中斷;也可以使用b funcname,funcname為函式的名稱,

當程式呼叫些函式時,則產生中斷

c(ontinue):c命令可以另中斷的程式繼續執行,直到下乙個中斷點或程式結束

p(rint):輸入某個變數的值,如程式定義了乙個int aa的就是,p aa就會輸出aa的當前值

n(ext):程式執行到斷點時中斷執行,可以用n指令進行單步執行

s(tep):程式執行到斷點時中斷執行,可以用s指令進行單步執行進某一函式

q(uit):退出gdb

遠端gdb除錯

在主機上準備目標機的gdb,例如目標機為arm,則準備arm linux gdb 目標機上需要安裝gdbserver 在目標機上用gdbserver執行程式 gdbserver 127.0.0.1 2345 test 注意,待除錯的程式編譯時需要加上 g 引數。在主機上發起鏈結和除錯 進入gdb g...

gdb 遠端除錯

1.首先把在宿主機上 編譯 arm fsl linux gnueabi gcc 主機的ip為192.168.1.202 目標板的ip為192.168.1.136 2.然後把目錄通過nfs 載入到目標板上 mount t nfs 192.168.1.202 home duan nfs mnt nfs ...

gdb 遠端qemu arm除錯

把 c 編譯成 arm 指令的可執行檔案 usr bin arm linux gnueabi g hello.cpp cat hello.cpp include void crash int main 直接執行報錯,因為 host 是 linux x86 a.out bash a.out canno...