Linux -- 认识 gdb

目录

前言:

Debug 模式和 Release 模式

怎么安装 gdb?(CentOS7)

怎么使用 gdb?

进入 gdb 模式:

查看代码:

 执行代码:

断点:

打断点:

查看断点:

删除断点:

使能断点:

逐过程与逐语句调试: 

查看变量:

一次性显示:

常显示:

范围调试:

多分枝测试:

退出 gdb :

​编辑 


前言:

前面我们学习了怎么在Linux下编写代码和运行代码,下面将学习怎么调试代码。

Debug 模式和 Release 模式

可执行程序有两个模式,一个是 Debug 模式,一个是 Release 模式:

1、Debug 模式下的可执行程序添加了调试信息,可以被调试,且体积较大

2、Release 模式下的可执行程序去掉了调试信息,不可以被调试,且体积较小

gcc/g++编译后的可执行程序默认为 Release 模式,若需要生成的可执行程序为 Debug 模式,需要在编译时,加上 -g

怎么安装 gdb?(CentOS7)

root 用户下,输入命令 yum install -y gdb

或者在普通用户下,输入 sudo yum install -y gdb

怎么使用 gdb?

我们现在写了一段代码,文件名为 test.c ,下面将演示如何调试这段代码:

进入 gdb 模式:

先把代码编译后,得到可执行程序 test,gdb 可执行程序(Debug) 就可以开始调试代码,千万记住是Debug模式,Release模式不能调试代码

 

必须是可执行程序才可以调试,否则会报错,提示该文件不是可执行程序! 

 

查看代码:

l 命令可以查看代码,一次可以查看 10 行:

 

我们也可以指定行数查看代码, l 行数 即可:

l 1 表示从头开始查看代码,回车可以向后查看代码:

如果行数不是 1 ,而是其他数字,则会显示 行数 的上下 10 行代码!

 

也可以指定想查看的代码的开始行和结尾行,l 数字,数字:

 

 执行代码:

gdb 模式下可以运行代码,查看运行结果,输入命令 r

 

断点:

打断点:

命令 b 行数 可以给指定的代码打断点:

命令 b 函数 可以给指定的函数打断点:

命令  b  文件名:行数  可以给指定文件的某一行代码打断点,指定的文件是可执行程序的依赖文件:

 

查看断点:

命令 info b 可以查看断点信息:

删除断点:

命令 d 断点编号 可以删除断点,注意是断点编号,而不是断点所在的行数

使能断点:

如果我们不想让这个断点生效,又不想删除断点,我们可以禁用断点,disable 断点编号 可以禁用断点,当我们查看断点信息时,Enb 列可以查看断点是否被禁用了,y 表示启用断点,n 表示禁用断点

enable 断点编号 可以重新打开断点: 

 

逐过程与逐语句调试: 

1、逐过程表示调试时,若遇到函数,会执行完整个函数,不会进入函数内部调试,把函数当作一条语句;

2、逐语句表示代码一条一条的调试,若遇到函数,会进入函数内部一句一句调试代码。

在进行逐过程和逐语句调试时,要先把代码跑起来,代码遇到断点会停下来,在代码停下来的地方,我们可以选择逐过程还是逐语句调试代码,下面是具体演示:

假设我们在代码的第16行打上了断点,

命令 n 表示逐过程:

命令 s 表示逐语句:

如果我们在调试时想跳出 for 循环,可以用命令 until 行数,跳转到指定的代码,当然 until 不止可以跳出 for 循环,想跳转的情况都可以使用。 

 

查看变量:

当我们逐过程或者逐语句调试时,想查看某个变量的值或者变量的地址,gdb 中可以选择一次性查看或者常显示 。

一次性显示:

命令 p 变量名 可以查看当前执行下变量的值,不过只显示一次,继续调试时不再显示:

常显示:

display 变量名 可以在执行代码时常显示变量的值:

我们常显示变量的值时,每个变量前面都有编号,如果我们不想常显示某个变量,undisplay 变量对应的编号 就可以取消常显示

 

范围调试:

除了前面 until 可以跳转到指定的代码外,还有以下两个常见的命令可以进行范围调试:

命令 c 可以从当前断点运行到下一个断点:

命令 finish 可以执行完当前的函数。

如下所示,命令 bt 可以查看调用堆栈,当前执行的函数为Sum,命令 finish 就可以执行完 Sum 函数,回到调用该函数的那一行代码:

多分支测试:

 

在进入 if 判断时,命令 set  var  变量名=值 可以在不修改代码的情况下,修改变量的值, 实现其他分支的测试:

 

注意修改变量的值的时机,在进入 if 判断之前修改变量的值的话,没办法如预期设想的走向另一个分支: 

 

退出 gdb :

输入命令 quit 就可以退出:

 

本文内容结束,欢迎各位大佬的批评指正! 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值