前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux调试器——gdb

Linux调试器——gdb

作者头像
有礼貌的灰绅士
发布2023-03-28 15:00:11
3.7K0
发布2023-03-28 15:00:11
举报
文章被收录于专栏:C++与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 代码行数 跳转只会跳转到有效行数,比如你想跳转到的那一行是空行,他会自动到空行下面的第一行有效代码,如果超出了整体代码的行数,就是不合法的,无法跳转。

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • gdb
  • 什么是gdb
  • debug与release
  • gdb的基本操作
    • 查看代码与断点
      • 执行与调试
        • 监视变量
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档