Linux调试器——gdb

简介: Linux调试器——gdb

什么是gdb

之前用的一直都是VS编译器进行调试,调试是一个非常重要的过程,在Linux中调试需要用到一个工具就是gdb。

在调试思路上VS编译器和gdb是一样的,但是调试过程的差距就很大了。

我们都知道Linux的操作都是通过命令完成的,调试也是一样的,靠的就是命令调试。

debug与release

之前在windows中用VS编译器会发现有两个模式分别是debug和release:

degub模式是给我们程序员使用的,方便调试代码和一些语法,比如assert函数。

release模式是给客户用的,因为客户的需求是如何使用这个软件,好不好用,而不是运行到某个阶段弹出来个报错或者是异常让客户自己调试。

相比较release模式下会优化代码,比如体积方面。

Linux环境下,gcc/g++编译出来的可执行程序默认是release模式

先来写一个程序验证一下

进入调试模式

gdb 你要调试的文件

后面的on debugging symbols found说明是release模式。

退出gdb模式按q+回车。

想让可执行程序编程debug模式就要加一个g选项。

然后比较一下dubug与release版本文件的大小

确实debug比release的大。

debug与release文件内部的区别

这里要借助一个工具来查看里面的内部文件:

readelf -S 你要查看的文件

先看release版本的:

debug版本:

这里就有dubug的调试信息。

gdb的基本操作

查看代码与断点

以下指令都是在gdb环境下进行操作。

进入gdb模式发现连个代码都不知道在哪里,这怎么调试呢?

查看代码:l

但是这里并不是从头开始的,l后面需要加一个数字,数字代表是从哪一行开始:

想继续查看直接按回车就好了:

最后告诉我们只有21行的代码。

在VS编译器中,我们按F9是可以进行打断点的,再按一次可以取消:

Linux进行打断点是:b 你要断点的行数

现在13行有一个断点,查看断点是info b:

断点也有自己的行,就是前面Num那一列,想删除断点可以用d 断点列表的行数:

注意不是代码中的行数,是info b中的行数!

执行与调试

在VS编译器中,F5是执行并且调试,Ctrl+F5是执行不调试,Shift+F5是取消调试。

在一段代码有多个断点的时候,按F5会停在一个断点上,在按一次会跑到下一个断点。

在gdb中与F5功能类似的是r:

他会在第一个断点处停下来,再按一次不会到下一个断点,而是从头开始

查看断点的时候会告诉帮你第一个断点已到达一次,也叫命中一次。

VS中F10是逐过程的运行,每次只跳过一行代码,比如调用函数的话是不会进入的,需要按F11逐语句才能进入调用的函数中查看:

gdb的逐过程:n

gdb的逐语句:s

n没进入函数。

s进入了函数。

断点跳跃:c

查看调用堆栈:bt

只想跑完当前函数,不受断点影响:finish

监视变量

进入函数之后要看到每个变量是什么:p 变量

这个操作可以让我们暂时看到变量的值

但是临时的肯定是不够用的们需要一个常显示才更方便。

常显示变量:display 变量

删除常显示变量:undisplay 监视变量列表中的序列

如果这个循环没问题,想跳出循环,调整至指定行:until 代码行数

跳转只会跳转到有效行数,比如你想跳转到的那一行是空行,他会自动到空行下面的第一行有效代码,如果超出了整体代码的行数,就是不合法的,无法跳转。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
相关文章
|
4月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
485 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
4月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
330 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
9月前
|
NoSQL Linux 编译器
GDB符号表概念和在Linux下获取符号表的方法
通过掌握这些关于GDB符号表的知识,你可以更好地管理和理解你的程序,希望这些知识可以帮助你更有效地进行调试工作。
397 16
|
8月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
407 0
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
1552 1
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
NoSQL Linux C语言
Linux GDB 调试
Linux GDB 调试
261 10
|
5月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
610 1
二、Linux文本处理与文件操作核心命令
|
5月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
388 137
|
5月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
926 57