【Linux工具篇】调试器gdb

简介: 【Linux工具篇】调试器gdb



releaseVSdebug模式

  • 程序的发布方式有两种,debug模式和release模式
  • Linux gcc/g++出来的二进制程序,默认是release模式
  • Linux gcc/g++要使其debug模式编译,加上-g选项
  • 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项
  • debug模式:编译器形成可执行程序的时候,会给可执行程序添加调试信息!
  • debug模式可以被调试
  • release模式不可被调试
  • 用户使用都是release版本,测试测得是release版本

【对比1】

【对比2】

readelf -S process.c-debug | grep -i debug
readelf -S process.c | grep -i debug

使用命令

sudo yum -y install gdb
//没安装gdb的小伙伴安装下
  • 打断点(确定bug范围)
  • 启用run到进入范围
  • 启用next / step 逐过程/逐语句调试;step进入函数调试
  • run / countinue:是重新和从当前位置开始调试
  • finish是跳过函数停止(只执行函数)
  • until X是结束循环调试
  • 调试过程中查看变量信息

NO1运行

  • gdb 可调式文件(含调试信息):开始启动调试。
  • quit(q)/ ctrl+d :退出调试(结束调试)。
  • run(r):运行程序。从开始连续而非单步执行程序。从头开始,有断点停下F5
  • continue(c):从当前位置开始连续而非单步执行程序。(从当前位置开始,会直接执行完函数)。
  • next(n):单条执行,逐过程(≈F10)(把函数当成一条语句执行完成)。
  • step(s):进入函数调用,逐语句(≈F11)。
  • finish:执行到当前函数返回,然后停止下来等待命令。
  • until X(行号):从当前位置跳转至X行号。(执行完X行号以前得程序)
  • 所有的命令必须在run之后才能启用,run在遇到断点才会停下,不然会直接执行完成。

NO2查看

  • list / l 行号:显示源代码,从头开始只显示10行。重复输入:接着上次的位置往下显示
  • list 15:15不会在开头,在中间位置,gdb会把要查看15的内容上下文全部展示出来。
  • list / l 函数:显示某个函数的源代码
  • info break:查看断点信息
  • info(或i) breakpoints:参看当前设置了哪些断点(同上)
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量:打印变量值
  • p {变量1,变量2}:查看多个变量
  • set var 变量=修改后的值:修改变量值(一般用于判断条件/判断语句)
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay :取消对先前设置的那些变量的跟踪
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值

NO3断点

  • break(b)行号:在某一行设置断点。
  • break 函数名:在某个函数的开头设置断点。
  • delete breakpoints(断点编号):删除所有断点
  • delete breakpoints (断点序号):删除序号为n的断点
  • disable breakpoints(断点编号):禁用断点
  • enable breakpoints(断点编号):启用断点
  • 注意如果不结束调试,假设只有序号1断点,删除序号1断点,再次打断点序号从2开始,不是从1开始。断点编号在没有退出调试之前是一个增长的计数器

总结

  • 创建项目test-debug
  • gdb -g test-debug:开始调试
  • ctrl + d 或者 quit(q) :退出调试
  • list/l 行号:显示test-debug源代码,接着上次的位置往下列,每次列10行。
  • 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:参看当前设置了哪些断点
  • display 变量名:跟踪查看一个变量,每次停下来都显示它的值
  • undisplay:取消对先前设置的那些变量的跟踪
  • until X行号:跳至X行
  • breaktrace(或bt):查看各级函数调用及参数
  • info(i) locals:查看当前栈帧局部变量的值
  • quit:退出gdb
  • breakpoints:是断点编号

🙂感谢大家的阅读,若有错误和不足,欢迎指正

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
8月前
|
安全 Linux Shell
四、Linux核心工具:Vim, 文件链接与SSH
要想在Linux世界里游刃有余,光会“走路”还不够,还得配上几样“高级装备”。首先是Vim编辑器,它像一把瑞士军刀,让你能在命令行里高效地修改文件。然后要懂“软硬链接”,软链接像个快捷方式,硬链接则是给文件起了个别名。最后,SSH是你的“传送门”,不仅能让你安全地远程登录服务器,还能用scp轻松传输文件,设置好密钥更能实现免-密登录,极大提升效率。
543 5
|
7月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
665 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
7月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
541 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
Linux 开发工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
7种比较Linux中文本文件的最佳工具
|
8月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
650 16
|
8月前
|
安全 Linux iOS开发
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
349 0
SonarQube Server 2025 Release 5 (macOS, Linux, Windows) - 代码质量、安全与静态分析工具
|
10月前
|
缓存 监控 Linux
Linux系统性能调优技巧和相关工具
Linux 作为一种应用应展和系统服务的优选操作系统,在处理性能和端到端点评估上持有出色表现。但是,在处理进程或系统处于低效状态时,性能调优就显得十分重要。本文将探讨一些 Linux 系统性能调优的常用技巧,并介绍相关工具
274 0
Linux系统性能调优技巧和相关工具
|
10月前
|
Linux 数据安全/隐私保护 iOS开发
推荐Linux环境下效能优良的双向文件同步工具
综合上述条件,对于Linux环境下的双向文件同步需求,Unison 和 Syncthing 是两个非常出色的选择。它们都有良好的社区支持和文档资源,适用于不同规模的环境,从个人使用到商业部署。Unison 特别适合那些需要手动干预同步过程、需要处理文件冲突解决的场景。而 Syncthing 更加现代化,适合需要自动、实时的数据同步与备份的环境。对于选择哪一个,这将取决于个人的使用场景和具体需求。
1084 16
|
12月前
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
511 32