gdb调试功能从零到会(Linux详解)

简介: 👀 1.安装gdb👀2.判断是否安装成功👀3.改成debug方式发布。👀 4.gdb功能简介

目录

👀 1.安装gdb

👀2.判断是否安装成功

👀3.改成debug方式发布。

👀 4.gdb功能简介

前言
gdb是Linux 下功能全面的调试工具。gdb支持断点、单步执行、打印变量、观察变量、查看寄存器、查看堆栈等调试手段。在Linux环境软件开发中,gdb 是主要的调试工具,用来调试 C 和 C++ 程序。

👀 1.安装gdb
直接在命令行输入:sudo yum install -y gdb

即可直接安装成功。

👀2.判断是否安装成功
安装成功后,在命令行直接输入 gdb 或者 gdb --version 进入交互模式。

如图所示:

当我们进入交互模式后发现无论我们输入什么命令都没有作用(无法调试),只会出现这样的情况:

"/home/bsk/test1/one/test.c": not in executable format: File format not recognized
(gdb) l
No symbol table is loaded. Use the "file" command.
哪为什么会这样呢?原因很简单,因为gdb在linux中默认是以release版(一般软件进行发布,用户体验模式)的方式来进行发布的,不可以被调试!所以我们要把它改成debug方式(包含调试信息)发布。

👀3.改成debug方式发布。
在命令行输入:vim Makefile(自动化构建工具(多文件操作))

进入之后写如下代码,其中的 -g选项就是把其改成debug方式。

1 mytest:test.c
2 gcc $^ -o $@ -g
3
4 .PHONY:clean
5 clean:
6 rm -f mytest
7
现在再make一下就会生成对应的mytest(debug版)

以上是详细内容,方便从根上理解。

而我们在日常使用时直接在 gcc命令下添加 -g 选项即可,再直接gdb就可。如下图所示:

👀 4.gdb功能简介
接下来就可以进行gdb使用了,简单介绍其几个功能如下:

 l:显示代码(l+数字:可以从你输入的数字开始显示,但会出现和其相关的上下文)

(gdb) l
1 #include <stdio.h>
2 int main()
3 {
4 printf("long time no see\n");
5 fflush(stdout);
6 sleep(2);
7 return 0;
8 }
(gdb)

 b+行号:打断点

(gdb) b 5
Breakpoint 1 at 0x40060b: file test.c, line 5.
(gdb)

  info b :查看断点编号信息(如下所示)

(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x000000000040060b in main at test.c:5

breakpoint already hit 1 time

2 breakpoint keep y 0x0000000000400601 in main at test.c:2
(gdb)

 d+编号:删除断点(不要输入以前打断点的行号,要输入查看断点信息里面的对应的Num号)

(gdb) d 1
(gdb) info b
Num Type Disp Enb Address What
2 breakpoint keep y 0x0000000000400601 in main at test.c:2
(gdb)

  r :运行程序(遇到断点会停下来,没有断点直接运行到最后)

(gdb) r
Starting program: /home/bsk/test1/one/a.out
long time no see

Breakpoint 1, main () at test.c:5
5 fflush(stdout);
Missing separate debuginfos, use: debuginfo-install glibc-2.17-317.el7.x86_64
(gdb)

在第5行停了下来。(最后一行提示缺少一个工具,复制安装就可以,或者不用管)

   n:单步执行语句(对应vs逐过程,不进入函数内部)

(gdb) n
6 sleep(2);
(gdb)

   finish :结束函数调用,然后停下来。

   s:进入函数内部(对应vs逐语句)

   until +行数:跳转到指定行

    display +名称:常显示(对应vs中的监视)

    undisplay +编号:取消常显示(监视)


相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
7天前
|
存储 NoSQL Linux
linux之core文件如何查看和调试
通过设置和生成 core 文件,可以在程序崩溃时获取详细的调试信息。结合 GDB 等调试工具,可以深入分析 core 文件,找到程序崩溃的具体原因,并进行相应的修复。掌握这些调试技巧,对于提高程序的稳定性和可靠性具有重要意义。
44 6
|
9天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
22天前
|
运维 监控 Linux
BPF及Linux性能调试探索初探
BPF技术从最初的网络数据包过滤发展为强大的系统性能优化工具,无需修改内核代码即可实现实时监控、动态调整和精确分析。本文深入探讨BPF在Linux性能调试中的应用,介绍bpftune和BPF-tools等工具,并通过具体案例展示其优化效果。
45 14
|
2月前
|
人工智能 Java 关系型数据库
Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述
Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述
87 4
Red Hat Enterprise Linux 9.5 发布下载,新增功能亮点概述
|
2月前
|
缓存 NoSQL Linux
Linux调试
本文介绍了Linux调试、性能分析和追踪的培训资料,涵盖调试、性能分析和追踪的基础知识及常用工具。
252 6
Linux调试
|
2月前
|
NoSQL 编译器 C语言
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。
C语言调试是开发中的重要技能,涵盖基本技巧如打印输出、断点调试和单步执行,以及使用GCC、GDB、Visual Studio和Eclipse CDT等工具。高级技巧包括内存检查、性能分析和符号调试。通过实践案例学习如何有效定位和解决问题,同时注意保持耐心、合理利用工具、记录过程并避免过度调试,以提高编程能力和开发效率。
51 1
|
5月前
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
73 10
|
5月前
|
Ubuntu Linux
内核实验(四):Qemu调试Linux内核,实现NFS挂载
本文介绍了在Qemu虚拟机中配置NFS挂载的过程,包括服务端的NFS服务器安装、配置和启动,客户端的DHCP脚本添加和开机脚本修改,以及在Qemu中挂载NFS、测试连通性和解决挂载失败的方法。
288 0
内核实验(四):Qemu调试Linux内核,实现NFS挂载
|
5月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
222 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
4月前
|
存储 缓存 Linux
Linux文件系统的功能规划
【9月更文挑战第12天】本文通过类比图书馆,形象地解释了文件系统的组织形式和管理方法。首先,文件系统需按块存储文件,并设有索引区方便查找。其次,热点文件应有缓存层提高效率,文件需分类存储以便管理。最后,Linux内核需记录文件使用情况,通过文件描述符区分不同文件,确保文件操作准确无误。