【学习笔记之Linux】工具之gdb

简介: 【学习笔记之Linux】工具之gdb

背景知识:


首先我们要知道,程序的发布一共有两种模式,一种是debug模式,是我们程序员自己编写代码的模式,可以进行调试,这个模式下编译出来的程序是包含调试信息的;一种是release模式,是程序的发布模式,测试人员测的也就是这个模式编译出来的程序。release是debug进行优化之后的模式,体量比较轻。但是这个优化是电脑优化的,不是开发人员优化的。所以就有可能出现一些问题。也就造成了一个名场面,测试:你这个程序有个bug;开发:不可能,在我电脑都可以运行。

 在Linux系统中通过gcc/g++编译出来的二进制程序默认是release模式的。

 要使用gdb调试,必须要在源代码生成二进制程序的时候,加上-g选项。


8f2a2a2d5c0c426a8c0931c41e3430ff.png

18367789834448db835d0d13fcab1570.png


常用命令介绍:

 进入调试模式:gdb 要调试的文件


 list/l 行号:显示源代码,每次列10行,如果没有加行号默认从第一行开始列,第二次就从第11行开始列。如果加了行号,就会以行号为中间点列出十行,在行号大于6的情况下,会保证行号出现在第6行。如你输入l 7,它会显示的行号是2、3、4、5、6、7、8、9、10、11;

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

 r/run:开始调试;

 n/next:单条执行,逐过程;

 s/step:进入函数调用,逐语句;

 b/break 行号:在某一行设置断点;

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

 info break:查看断点信息,因为gdb不是可视化的,不像vs看旁边有没点就能判断是否有断点,所以要知道有哪些断点就需要进行查看,这里的断点被整理成类似表格的东西显示出来,包含了许多信息;

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

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

 p 变量:打印变量值;

 set var:修改变量的值;

 c/continue:让暂停的程序继续运行;

 delete breakpoints:删除所有断点;

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

 disable breakpoints:禁用断点;

 enable breakpoints:启用断点;

 i/info breakpoints:查看当前设置了哪些断点;

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

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

 until 行号:跳至行号位置;

 bt/breaktrace:查看各级函数调用及参数;

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

 quit/[ctrl + d]:退出gdb。

307ee634fb35401ca30033f78e35a729.png

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
4天前
|
数据挖掘 大数据 Linux
探索Linux中的snice命令:一个虚构但启发性的数据分析工具
`snice`是一个想象中的Linux命令,用于低优先级地从大数据集中抽样数据。它结合`nice`和`sampling`,支持多种抽样策略,如随机和分层。参数包括指定样本数、策略、输入输出文件和进程优先级。示例:`snice -n 1000 -s random -i large_log.txt -o sample_log.txt`。使用时注意资源管理、数据完整性及权限,并与其它工具结合使用。虽然虚构,但体现了Linux工具在数据分析中的潜力。
|
6天前
|
Shell Linux
RSIC-V“一芯”学习笔记(二)——Linux入门教程
RSIC-V“一芯”学习笔记(二)——Linux入门教程
|
10天前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed 's/apple/orange/g' example.txt`替换文本,`/error/d`删除包含"error"的行,`a\---`在每行后加"---"。使用时注意备份、测试命令和理解正则表达式。
|
12天前
|
监控 算法 Linux
Linux下工具tc详细讲解及限制IP和端口实例
TC (Traffic Control) 是Linux内核中提供的一个用于控制和管理网络流量的强大工具,它允许用户实现QoS(Quality of Service)策略,包括带宽限制、优先级控制、延迟保证等。TC基于内核的队列 discipline (qdisc) 和流量类别(class) 体系结构,允许对进入或离开网络接口的数据流进行复杂的整形和过滤。
|
12天前
|
运维 Linux 应用服务中间件
Linux之自动化运维工具ansible、ansible模块(2)
Linux之自动化运维工具ansible、ansible模块(2)
|
12天前
|
运维 Linux Shell
Linux之自动化运维工具ansible、ansible模块(1)
Linux之自动化运维工具ansible、ansible模块(1)
|
12天前
|
缓存 网络协议 Linux
Linux下脚本编写局域网扫描工具
Linux下脚本编写局域网扫描工具
|
17天前
|
运维 Linux
探索 Linux 系统信息工具:uname
探索 Linux 系统信息工具:uname
10 0
|
18天前
|
数据可视化 Shell Linux
技术笔记:Linux学习笔记1
技术笔记:Linux学习笔记1
11 0
|
19天前
|
安全 前端开发 Linux
深入了解Linux命令pinentry-curses:保护敏感输入的终端工具
`pinentry-curses`是GnuPG的一部分,用于CLI中安全输入密码或PIN。它利用curses库创建一个隐藏输入的终端界面,增强安全性。适用于GnuPG及其它需要安全输入的场景。特点包括安全隐藏输入、用户友好、灵活配置。常用参数如`--password`、`--title`等。在GPG加密文件时,可以结合`--pinentry-mode curses`使用。记得在安全环境下操作,勿明文显示密码,保持软件更新,并使用强密码。