Linux调试器gdb

目录

一、关于Linux调试器gdb

二、gdb的操作

1、quit

2、l

3、r

4、b+行号

info b

5、d+断点编号

6、n

7、p+[变量名]

8、s

9、bt

10、finish

11、display+[变量名]

12、until+行号

13、c

14、disable/enable+断点编号


一、关于Linux调试器gdb

首先,我们的gcc/g++默认形成的可执行程序是release的,所以没有办法直接进行调试

如果直接使用gcc/g++编译出来的可执行文件进行gdb,就会出现如下问题:

先gcc test.c -o test,形成可执行程序test

然后gdb test会出现如下提示:不是debug,无法调试

如果想变为debug,则gcc时后面加上-g选项,输入gcc test.c -o test -g即可

gcc时加上-g选项后,gdb [可执行程序]就能进入调试,准备工作就完成了


读取可执行程序的数据段格式readelf -S [可执行程序]

如果想找有关可执行程序的debug信息,和管道以及grep结合使用,即可观察到


二、gdb的操作

gdb会记录最近一条命令,如果命令不变化,可以直接回车会自动执行最近一次输入的命令

1、quit

quit是退出调试

进入gdb后,如果想退出输入quit即可


2、l

l是显示代码,是list的简写

如果想更清楚的看代码,l 0就表示从第一行开始显示代码


3、r

r是直接开始调试,如果没有设置断点,则直接运行结束

如果有断点,则在断点处停下来


4、b+行号

b+行号可以给特定的行打断点,b是breakpoint的简写

info b

info b是查看断点

继续添加断点并查看断点


5、d+断点编号

d+断点编号是删除断点,d是delete的简写

断点编号即info查看断点时,最左边的Num


6、n

n是在调试中逐过程执行,是next的简写

从上图可以清楚看到打断点后,执行r,程序会在断点处17行停下来,接着一直执行n:逐过程,直到程序执行完毕


7、p+[变量名]

p+[变量名]是打印变量内容

在执行了第18行后,p rst就可以看到rst现在的值时15


8、s

s是调试中逐语句执行,s是step的简写

首先看一下这个代码,是有一个Add函数的

我们在17行打了断点,在执行到18行时,想进入这个Add函数,这时输入s即可进入:

然后即可继续n或s调试代码


9、bt

bt是查看调用堆栈的

即栈顶是正所处的函数Add,栈底是main函数


10、finish

finish是将当前函数跑完就停下来

当我们逐语句走到函数Add里了,想直接跑完这个Add函数,直接输入finish:

这时再bt调用堆栈,发现已经没有Add函数了


11、display+[变量名]

display+[变量名]是给这个变量名长显示

当我们正常调试时,什么变量都没有,这时我们想观察i的值,并且接下来每一次逐语句执行都显示i,则display i即可,如果还想看变量num,再displaynum即可

这时我们不想看num了,undisplay+[显示编号],例如num是编号2,则输入undisplay 2,就在接下来的调试中就不会长显示num了,只会显示i的值


12、until+行号

until+行号是跳转到指定行

 如果执行到循环里,想从循环跳出来,

例如我们在第9行执行while循环,想直接跳到12行,until 12即可


13、c

c是运行到下一个断点处就停下来,c是continue的简写

17行和19行都有一个断点,c可以直接从17行断点处到第19行断点处


14、disable/enable+断点编号

 disable/enable+断点编号是打开和关闭断点

关闭断点意思就是断点依然存在,但是不起任何作用

如上图可以清楚看到disable 1即关闭断点编号为1的断点后,在查看断电时End下面的y变为n,这时表示关闭断点

如果想再打开断点,就是enable+断点编号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值