gdb編譯及使用

gdb源碼下載:ftp://sourceware.org/pub/gdb/releases/

1.下面爲8.3的編譯


進入gdb8.3目錄下:

第一步:編譯配置(若已經編譯過一次,若要編譯其他平臺,請重新解壓編譯;因爲編譯過之後參數已經被修改,編譯其他平臺會報錯)

1.編譯在本機上運行gdb,處理的目標平臺爲arm-linux的gdb版本,生成的執行文件前綴爲arm-linux-,安裝目錄爲/usr/local/arm-gdb

./configure --target=arm-linux --program-prefix=arm-linux- --prefix=/usr/local/arm-gdb

編譯選項說明:
--target=arm-linux意思是說目標平臺是運行於ARM體系結構的linux內核;
--program-prefix=arm-linux-是指生成的可執行文件的前綴,比如arm-linux-gdb;
--prefix是指生成的可執行文件安裝在哪個目錄,這個目錄需要根據實際情況作選擇。如果該目錄不存在,會自動創建,當然,權限足夠的話。

--build=編譯該軟件所使用的平臺

--host=該軟件將運行的平臺

--target=該軟件所處理的目標平臺 


2.編譯在arm-linux平臺上運行的gdb,處理的目標平臺爲arm-linux的gdb版本,生成的執行文件前綴爲arm-linux-,安裝目錄爲/usr/local/arm-gdb

./configure --host=arm-linux --target=arm-linux --program-prefix=arm-linux- --prefix=/usr/local/arm-gdb

 

3.編譯在本機上運行的gdb,處理的目標平臺爲本機的gdb版本,安裝目錄爲/usr/local/gdb

./configure --host= --target= --program-prefix= --prefix=/usr/local/gdb

 

第二步:編譯

make

 

第三部:安裝

make install

 

2.gdbserver編譯:

進入gdb8.3/gdb/gdbserver目錄下:

第一步:編譯

生成在arm-linux平臺運行,執行arm-linux目標的gdbserver,安裝路徑爲/user/local/gdbserver

./configure --host=arm-linux --target=arm-linux  --prefix=/user/local/gdbserver

第二步:編譯
make

第三步:安裝
make install

 

3.使用方法:

3.1、在編譯要進行調試的應用程序 加上 -g

   測試程序如下(test_debug.c)

#include <stdio.h>

void C(int *p)
{
    *p = 0x12;
}

void B(int *p)
{
    C(p);
}
void A(int *p)
{
    B(p);
}
void A2(int *p)
{
    C(p);
}
int main(int argc, char **argv)
{
    int a;
    int *p = NULL;
    A2(&a);  // A2 > C
    printf("a = 0x%x\n", a);
    A(p);    // A > B > C
    return 0;
}


 

 編譯:

arm-linux-gcc -g -o test_debug test_debug.c


3.2、在目標機上(如開發板設備):

./gdbserver 192.168.1.10:1234 ./test_debug

 打印出如下信息:

Process ./test_debug created; pid = 751
Listening on port 1234

 

  註釋:192.168.1.10:本開發板的ip

          1234:端口號,自己隨便寫的

          ./test_debug:要調試的程序

 

3.3、在PC上輸入:

   

./arm-linux-gdb ./test-debug

target remote 192.168.1.10:1234


3.4、正式調試!介紹幾個常用的命令

  (1)l:列出所有源代碼

  (2)break main:在main處打斷點

          break test_debug.c:11:在test_debug.c的11行打斷點

  (3)c:運行到斷點處

  (4)step:單步執行

  (5)next:單步執行,但是step會進入函數裏面,但是next不會

  (6)print a:打印a這個變量的值

  (7)quit:退出,輸入此命令則開發板上的gdbserver也退出

   (8)  詳細的GDB調試命令
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章