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
相关文章
|
16小时前
|
NoSQL Java Unix
Linux:调试器 - gdb
Linux:调试器 - gdb
14 1
|
16小时前
|
NoSQL Linux 编译器
【Linux】开始使用gdb吧!
这篇文章我们来学习 gdb 的使用方法。我们在Windows端编写代码时有宇宙最强编译器VS2022帮助我们调试,那Linux端有没有一款强大的调试工具呢???
51 17
【Linux】开始使用gdb吧!
|
16小时前
|
NoSQL Linux C语言
【Linux】Linux调试器-gdb使用
【Linux】Linux调试器-gdb使用
8 0
|
程序员 编译器 Linux
linux gdb-多线程调试
相信使用C/C++语言开发软件的程序猿们都经历过‘栈溢出’的问题。‘栈溢出’问题通常十分的隐蔽,有的时候问题复现也十分的困难。每当软件出现莫名其妙的问题时,总是有人怀疑是不是栈溢出了,但是问题的排查又十分的困难,所以,‘栈溢出’就是广大C/C++开发者的噩梦。
121 0
|
NoSQL IDE Linux
linux gdb-多线程调试
linux下应用程序的调试工具主要就是gdb,可能你已经习惯了IDE形式的调试工具。也许刚开始使用gdb作为调试工具,会有诸多的不变,但是一旦你学会了如何使用gdb你就会被其富有魔力的功能所吸引的,下面开始逐步的学习linux下gdb的使用方式。
359 0
|
16小时前
|
安全 网络协议 Linux
linux必学的60个命令
Linux是一个功能强大的操作系统,提供了许多常用的命令行工具,用于管理文件、目录、进程、网络和系统配置等。以下是Linux必学的60个命令的概览,但请注意,这里可能无法列出所有命令的完整语法和选项,仅作为参考
|
16小时前
|
Linux 程序员 计算机视觉
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
【linux 学习】在Linux中经常用到的cmake、make、make install等命令解析
10 0
|
16小时前
|
Linux
Linux的find命令使用
【5月更文挑战第11天】Linux的find命令使用
10 3
|
16小时前
|
监控 Linux 数据处理
|
16小时前
|
编解码 Ubuntu Linux