Linux | 调试器-----GDB

前言:

        在liunx中如何对一段代码去进行调试呢?此时就要使用到Linux下的调试器gdb了;对于这个调试器来说,不像是VS中那样的图形化界面形式,而是采用纯命令行的形式进行调试。

简介:

      GDB是一个由GNU开源组织发布的、UNIX/LIUNX操作系统下的、基于命令行的、功能强大的程序调试工具。 对于一名Linux下工作的c/c++程序员,gdb是必不可少的工具。

【DeBug】和【Release】版本的不同之处:

【Debug】—— 调试版本

【Release】—— 发布版本

       

       使用VS调试的时候我们可以直接使用鼠标来进行操作,当前程序以DeBug或者是Release的形式进行运行,那么运行出来的可执行程序版本也是不同的,程序员在编写代码后运行一般是使用【DeBug】环境进行运行。在企业里写软件项目,将代码写完后程序员自己要做简单的测试,保证代码没有问题。


       当程序员自己测试完没有问题之后,就会将这个可执行程序给到测试人员进行测试,而且会给出自己的单元测试报告。对于测试人员来说所处的模式是【Release】,也就是将来客户要使用的这款软件的发布版本。

  •  很明显看到出dug文件的体积>release的文件体积
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
     gcc -o $@ $^ -g

为什么Release不能调试但DeBug可以调试?

在形成可执行程序的时候Debug会有调试信息,而Release却没有。

gcc默认行为:

1.默认是动态链接

2.默认是release

 调试:

gdb 可执行程序

 调试命令:

 l(list) 行号/函数名 —— 显示对应的code,每次10行

 r(run) —— F5【无断点直接运行、有断点从第一个断点处开始运行】

 b(breakpoint) + 行号 —— 在那一行打断点

 b 源文件:函数名 —— 在该函数的第一行打上断点

 b 源文件:行号 —— 在该源文件中的这行加上一个断点吧

 info b —— 查看断点的信息

breakpoint already hit 1 time【此断点被命中一次】

 d(delete) + 当前要删除断点的编号 —— 删除一个断点【不可以d + 行号】

若当前没有跳出过gdb,则断点的编号会持续累加
 d + breakpoints —— 删除所有的断点

 disable b(breakpoints) —— 使所有断点无效【默认缺省】

 enable b(breakpoints) —— 使所有断点有效【默认缺省】

 disable b(breakpoint) + 编号 —— 使一个断点无效【禁用断点】

 enable b(breakpoint) + 编号 —— 使一个断点有效【开启断点】

相当于VS中的空断点
 enable breakpount —— 使一个断点有效【开启断电】

 n(next) —— 逐过程【相当于F10】

 s(step) —— 逐语句【相当于F11】

 bt —— 看到底层函数调用的过程【函数压栈】

 set var —— 修改变量的值

 p(print) 变量名 —— 打印变量值

 display —— 跟踪查看一个变量,每次停下来都显示它的值【变量/结构体…】

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

排查问题三剑客

 until + 行号 —— 进行指定位置跳转,执行完区间代码
 finish —— 在一个函数内部,执行到当前函数返回,然后停下来等待命令
 c(continue) —— 从一个断点处,直接运行至下一个断点处【VS下不断按F5】
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J 2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值