Linux调试器-gdb

调试前的准备

如果一个程序是可以被调试的,该程序的二进制文件一定加入了一些调试信息!

就好比在VS中,Debug状态下可以调试代码,Release状态下不能调试代码。

在CentOs中默认生成的可执行程序是Release的,所以是不能被调试的,所以如果我们要想生成的可执行程序能被调试,就需要在最后加上-g,同时我们也可以看到带Debug信息的文件比Release文件要大上一些。

此时我们再查看段构成中就有了一些debug信息

gdb相关的命令

进入调试 gdb 程序名

如下图想要调试mytest这个程序就要输入 gdb mytest

退出调试模式 quit

查看可执行程序段构成 readelf -S 程序名

运行程序 run(r)(这个命令类似于VS中的ctrl+F5)

显示源代码 list(l)(每次显示10行代码,再次输入命令会接着上次的位置接着往下再显10行)

显示从某一行开始往后的十行代码 list(l)后跟行号

显示某个函数的代码 list(l)后跟函数名

在某行设置断点 break(b)后跟行号

在某个函数开头设置断点 break(b)后跟函数名(给函数打断点实际上打在了函数内部第一行代码上)

显示当前所打的断点 info break(b)

下面红框处的意思是断点现在是启用的,就像VS中的断点启用和禁用一样

删除所有断点 delete breakpoints

删除序号为n的断点 delete n(d n)n代表断点号

禁用序号为n的断点 disable n(n代表断点编号)

启用断点 enable n

下面可以看到禁用断点3后断点状态由yes变成了no

进入函数调用,逐语句 step(s)相当于VS中的F11

单条执行 next(n)相当于VS中的F10

跟踪查看一个变量,每次停下来都显示它的值 display接变量名

跟踪查看一个变量的地址,每次停下来都显示它的值 display接取地址符号(&)变量名

只打印一次变量值 p

取消对先前设置的那些变量的跟踪 undisplay接编号

下图我们取消了跟踪1号变量

执行到当前函数返回,然后停下来等待命令 finish

从当前位置开始连续执行到下一个断点处 continue(c)

跳至X行 until X行号

查看各级函数调用及参数 breaktrace(bt)

修改变量的值 set var(比如一个for循环中,我想马上调到i为10的情况就可以用这个)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值