【Linux】Linux调试器-gdb使用

简介: 【Linux】Linux调试器-gdb使用

背景

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上-g选项

初次使用时,需要先安装:

sudo yum install -y gdb

使用

注意使用gdb时,调试的是debug模式。

指令

list/l 行号:显示源代码,后续直接回车会接着上次的位置往下列,每次列10行。l后面可以接数字(行号)。

list/l 函数名:列出某个函数的源代码。

r或run:运行程序。

n 或 next:单条执行。

s或step:进入函数调用

break(b) 行号:在某一行设置断点

break 函数名:在某个函数开头设置断点

info break :查看断点信息。

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

print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数

p 变量:打印变量值。

set var:修改变量的值

continue(或c):从当前位置开始连续而非单步执行程序

run(或r):从开始连续而非单步执行程序

delete breakpoints:删除所有断点

delete breakpoints n:删除序号为n的断点

disable breakpoints:禁用断点

enable breakpoints:启用断点

info(或i) breakpoints:参看当前设置了哪些断点 (可简写为 i b)

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

undisplay:取消对先前设置的那些变量的跟踪

until X行号:跳至X行(中间的代码都是运行了的)

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

info(i) locals:查看当前栈帧局部变量的值

quit:退出gdb

————————————————

  • 我们打断点后,如果要删,需要 d 断点的序号
  •  Enb显示断点是否启用。
  • 断点只能一个一个打。

断点禁用后,就不会执行该断点了。如果对空行打断点,即使是启用状态,他也不会生效。

next(n)相当于vs里面的逐过程,它不会进入函数。不输入时,会默认找上一条指令执行。上图中,并没有进入AddToTarget函数。如果想逐语句,可以用step进入函数。

p 变量可以单次查看变量的值。

如果想常显示变量,可以用display。注意他们前面都会有编号的。

如果想取消常显示,用undisplay,注意后面接的是编号。

如果我们想从一个断点直接到另一个断点,可以用continue (c)。

当我们想检查是不是某个函数有问题,可以用finish,它会马上执行完这个函数,然后停下来。 如果函数有问题,就会崩,没问题就正常运行,可以很快判断哪里出错。

在调试过程中是可以修改变量的值的,用set var 修改变量。通常用来判断循环条件,这样做可能会导致最终的值不正确。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
4天前
|
NoSQL Java Unix
Linux:调试器 - gdb
Linux:调试器 - gdb
17 1
|
4天前
|
NoSQL Linux 编译器
【Linux】开始使用gdb吧!
这篇文章我们来学习 gdb 的使用方法。我们在Windows端编写代码时有宇宙最强编译器VS2022帮助我们调试,那Linux端有没有一款强大的调试工具呢???
52 17
【Linux】开始使用gdb吧!
|
4天前
|
NoSQL IDE Linux
Linux的学习之路:8、Linux调试器-gdb使用
Linux的学习之路:8、Linux调试器-gdb使用
21 0
|
4天前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
197 2
|
20小时前
|
NoSQL Linux Shell
Linux MongoDB重启命令
【5月更文挑战第8天】
|
2天前
|
存储 Linux Shell
YUM管理器的命令列表-Linux
YUM管理器的命令列表-Linux
8 0
|
4天前
|
Linux 程序员 计算机视觉
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
16 0
|
4天前
|
Linux
Linux的find命令使用
【5月更文挑战第11天】Linux的find命令使用
15 3
|
4天前
|
监控 Linux 数据处理