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调试命令
 

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