GDB的使用

GDB 手动调试

基本使用

1、将gdb-7.5.tar.gz拷贝到/usr/local/目录下(可以拷贝到任何你愿意的Linux目录下)

2、解压gdb-7.5.tar.gz

tar -zxvf gdb-7.5.tar.gz

3、编译arm-linux-gdb
到目录gdb-7.5: cd gdb-7.5
执行:

  $ ../configure --target=arm-linux --disable-werror --prefix=/usr/local/arm-gdb -v

target指明编译生成的GDB用于调试ARM-LINUX程序,prefix指明安装目录

   $ make
   $ make install
   $ gedit /etc/environment --把arm-linux-gdb加入环境变量 (:/usr/local/arm-gdb/bin)
   $ source /etc/environment  //更新环境变量

这样就可以在/usr/local/arm-gdb/bin目录下看到如下三个可执行文件
arm-linux-gdb arm-linux-gdbtui arm-linux-run

4.编译gdbserver

cd gdb/gdbserver
./configure --host=arm-linux
cp gdbserver /work/nfs_root/first_fs/bin

5.编译要调试的应用,编译时加上-g选项

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

6.调试
6.1 在ARM板子上

gdbserver 192.168.1.17:2345 ./1

6.2 在PC上

arm-linux-gdb ./1

常用指令

设置断点

break 函数名

break 行号

break 文件名:函数名

break 文件名:行号

break +偏移量

break -偏移量

break *地址

清楚断点

delete <断点id>:删除指定断点

delete:删除所有断点

clear

clear 函数名

clear 行号

clear 文件名:行号

clear 文件名:函数名
(gdb)break main
(gdb)c
(gdb)break 1.c 26
(gdb)step
(gdb)next

查看断点

info break

在这里插入图片描述

显示栈帧

bt

bt full:不仅显示backtrace,还显示局部变量

bt N:显示开头N个栈帧

bt full N

在这里插入图片描述

输出变量的值

在这里插入图片描述

查看寄存器

在这里插入图片描述

单步

单步执行有两个命令next和step,两者的区别是next遇到函数不会进入函数内部,step会执行到函数内部。

如果需要逐条汇编指令执行,可以分别使用nexti和stepi。

继续执行

调试时,使用continue命令继续执行程序。程序遇到断电后再次暂停执行;如果没有断点,就会一直执行到结束。

coredump

让程序在开发板上直接运行,当它发生错误时,令它产生core dump文件。
然后使用gdb根据coredump文件,找到发生错误的地方。

在ARM板上执行:

ulimit -c unlimited

执行应用

./1

执行之后会产生coredump文件(core文件)。

在PC机上执行:

arm-linux-gdb ./2 core

可以看到以下结果:

Core was generated by `./2'.
Program terminated with signal 11, Segmentation fault.
#0  0x000084ac in C (p=0x0) at 2.c:5
5		*p = 0x12;

输入bt指令,可以看到详细的信息:

(gdb) bt
#0  0x000084ac in C (p=0x0) at 2.c:5
#1  0x000084d0 in B (p=0x0) at 2.c:10
#2  0x000084f0 in A (p=0x0) at 2.c:15
#3  0x0000855c in main (argc=1, argv=0xbef99ee4) at 2.c:30

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值