如何在Linux环境下调试代码(类比VS2022学习简单易懂 快来鸭!)

19 篇文章 16 订阅
订阅专栏

目录

1. 前言

2. 准备工作

3. 使用gdb调试代码

3.1 显示代码

3.2 VS2022的调试

3.3 gdb基础操作

3.4操作演示

3.5 实际操作技巧

3.6 补充指令

 4. 稍作总结


1. 前言

不同于VS2022等大部分编译器是一个集成开发环境 , 即编写 编译 运行 调试 发布等一条龙服务 , 纯Linux下这些功能模块是分开的。在Linux操作系统中我们编写代码主要使用的是vim工具 , 编译代码使用的是gcc/g++ , 而调试代码我们主要使用的则是gdb工具

2. 准备工作

在介绍gdb工具之前 , 需要我们先生成一个可Debug的可执行文件 , 因为我们gdb调试的对象是编译好的可执行文件。[gdb + 编译好的可执行文件]

Linux中gcc/g++直接编译后生成的可执行文件是不可以用gdb调试的。原因我们可以类比VS2022中的编译出的两大版本 -Debug/Release 来探究 , Release是发行版本 , 不包含任何调试信息 , 也就是说 , 只有包含调试信息的可执行文件 , 即Debug版本下 , 我们才能对之调试。 

gcc/g++ 编译文件 , 默认是编译出的是Release版本 , 所以需要我们gcc/g++加 -g 选项 , 生成的可执行文件才会带调试信息(Debug版本) , gdb才可以对之调试。

3. 使用gdb调试代码

我们在命令行中输入 gdb + 可执行文件 , 即可进入gdb调试。

3.1 显示代码

我们要调试代码 , 首先要看到原来的代码 , 所以我们首先要学习的是 l 指令 (l  -list的缩写) , 即以列表的形式打印文件中的10行代码

如果 l 后面加行号数字 , 如 l 7 , 则是显示第7行代码以及前4行与后5行代码 , 再继续输入 l 指令 , 则可以继续向下显示10行代码。 

如果 l 后面加函数名 , 则可以打印出该函数体的代码

3.2 VS2022的调试

熟练在VS系列中写代码调试的我们知道 , 在VS2022中 , F9是打断点 , F5是调试 , F10是逐过程 , F11是逐语句 , 同时我们也可以在VS界面中调出 监视窗口 , 实时观察各个变量的值

3.3 gdb基础操作

下面我们以类比VS的方法来看gdb中的调试基础操作:

F5调试  :   r(run) 开始调试           continue  继续调试运行直至到下一个断点处 。

(前者r(run)是VS2022中一开始按F5开始调试 , continue是后续F5到下一个断点的作用)

例如  :  在调试运行的时候在某行打断点后 ,  输入continue再运行至断点处。 

F9打断点  :  b(breakpint) + n(欲打断点的行号数)        

例如  :  b 6 在第六行打个断点

F10逐过程 :  n(next)调试运行到下一句 (遇到函数体接口不会进入该函数体内部代码 , 直接跳过)

F11逐语句 : s(step)调试运行到下一句 (遇到函数体接口会进入该函数体内部代码进行调试)

监视窗口 , 设置追踪的变量 :

例  :  display  a    [设置对变量a值的窗口监视]

例  :  display  &a  [设置对变量a地址值的监视]

取消对某个变量的追踪监视 :

例  :  undisplay  a    [取消对变量a值的窗口监视]

例  :  undisplay  &a  [取消对变量a地址值的监视]

暂时一次性查看某变量现在的值 :

例  :  p a       [查看现在变量a的值]

例  :  p sum  [查看现在变量sum的值] 

继续调试直至结束当前函数体 : 

调试时 , 如果我们不小心进入某个函数体内部 , 但是我们又不想继续在该函数体内调试 , 可以finish结束该函数体的调试。

调试运行直至到某行 : 

until + n (从当前行一直调试运行到第n行再停下)

3.4操作演示

首先我们 l -list 展示一下欲调试的代码 : 

3.5 实际操作技巧

调试举例一 : 

VS调试过程中我们进入了一个函数后 , 如果我们后悔进入调试这个函数了, 我们当然可以连续F10 F11逐步调试走出去。不过主要省力的方法 , VS中我们可以先在外面打一个断点F9, 然后再F5跑到下一个外部的断点, 就可以跑出去了。

仿照VS中这种方法 , 在Linux gdb中 , 我们可以在外面的行中 b (breakpoint) 打一个断点 , 然后c (continue)直接调试跑到该行 , 从而跑出该函数体。

或者在Linux gdb中 , 我们也可以直接finish跑出我们现在调试所处的函数体

调试举例二 :

我们要快速定位到一个BUG报错出现的位置 , 在VS中 , 我们只能通过F9打断点 , 然后F5调试到断点处来逐模块查找(或者F10 F11一行一行寻找报错)

在Linux gdb中, 我们也可以仿照VS , 来 b (breakpoint) 打断点 , 然后c (continue)直接调试至断点 , 从而分模块排查。在找到该模块后 , 在Linux gdb环境下我们还可以继续使用until + n直接调试至第n行来精准的定位。

调试举例三 :

你进入了一个循环 又是很后悔进入这个大循环模块 , VS中我们可以先在外面打一个断点F9, 然后再F5跑到下一个外部的断点, 就可以跑出去了。

在Linux gdb中 , 我们也可以仿效VS , b (breakpoint) 打断点 , 然后c (continue)直接调试至断点处 , 从而逃离循环 。

Linux gdb中 , 我们的对策也可以是until+n 直接调试运行到第n行 。

3.6 补充指令

在gdb调试中 , 输入bt指令 , 就可以查找现在的函数栈帧展开情况

gdb调试中 , 也可以像VS中直接在调试中改变一个变量的值

VS : 在监视窗口非常外挂的将变量值改变。

gdb : 输入 set var a=10 ,即可在调试过程中直接把a变量的值变为10 , 再往后调试则变量a的值是10。

 4. 稍作总结

这就是Linux环境下gdb调试工具的使用方法 , 以及gdb调试在实战中的演示。

博主最想告诉大家的只有一点 : 多练才能掌握gdb调试 !!!

linux-0.11源代码,修改后便于使用GDB调试
06-09
在网络上下载到linux-0.11的源代码后,首先是不断地除错,最终使其能在ubuntu12.04上编译通过,并能用bochs仿真。后来发现bochs仿真bootsect.s不方便,就改用qemu仿真了。
程序员计算机代码类比推理.docx
12-22
程序员计算机代码类比推理.docx
Visual Studio 2022 跨平台开发Linux C程序环境搭建
zyy29182918的博客
04-27 3389
Visual Studio 2022 跨平台开发Linux C程序环境搭建
Linux下开发调试C++代码的三种方法
m0_51415606的博客
03-31 1029
关于这三种调试方法的示例都是基于cmake开发下,也适用不用cmake开发的情况,就不一一演示了,道理都是相通的。
linux下,如何调试代码
yazhouren的专栏
05-24 905
程序该如何进行调试呢? 有没有像visual studio F10那样单步调试的东西? GDB有这么强大吗? 但是还真的没有听说过别的调试工具,linux下. 2012.5.23 可以在vim下调用GDB进行调试 Unix-like的哲学就是每个东西只做一样,并且做到最好 Vim文本编辑,GDB程序调试! 不同的分工,每个都做到极致! 2012.5.30
Linux代码调试
Manner11的博客
04-26 2494
Linux系统下代码调试 1.简介 在Linux系统下可以使用GDB进行调试,GNU开源组织发布的一个强大的UNIX下调试程序工具。 一般来说,GDB主要帮助你完成下面四个方面的功能: 1、启动你的程序,可以按照你自定义的要求随心所欲的运行程序。 2、可以让调试程序在你所指定的位置的断点处停止。 3、当程序停止时,可以检查此时你的程序中所发生的事情。 4、动态的改变你程序的执行环境。 2.使用以及常用命令 首先需要在linux系统下安装g++(编译器)以及GDB(调试工具),vim(其余编辑器也可以) 下
linux下的程序调试方法汇总
weixin_30905133的博客
07-11 536
搞电子都知道,电路不是焊接出来的,是调试出来的。程序员也一定认同,程序不是写出来的,是调试出来的。那么调试工具就显得尤为重要,linux作为笔者重要的开发平台,在linux中讨论调试工具主要是为那些入门者提供一些帮助。调试工具能让我们能够监测、控制和纠正正在运行的程序。我们在运行一些程序的时候,可能被卡住或出现错误,或者运行过程或结果,没能如我们预期,此时,最迫切需要明白...
如何在linux调试代码
m0_52857070的博客
05-17 465
gdb调试
八年级数学下册第十八章类比学习平行四边形素材新版新人教版
08-19
八年级数学下册第十八章类比学习平行四边形素材新版新人教版
数学同步优化指导北师大选修归纳与类比PPT学习教案.pptx
10-01
数学同步优化指导北师大选修归纳与类比PPT学习教案.pptx
Apache TVM 是一个开放源代码的机器学习编译器框架,用于 CPU,GPU 和机器学习加速器.zip
最新发布
05-05
神经网络学习(或连接学习):模拟人脑的微观生理级学习过程,以脑和神经科学原理为基础,以人工神经网络为函数结构模型,以数值数据为输入,以数值运算为方法,用迭代过程在系数向量空间中搜索,学习的目标为函数。...
analogy-classifier:机器学习法进行类比分类
04-07
Lim S.,Prade H.,Richard G.(2019)解决单词类比:机器学习的观点。 在:Kern-Isberner G.,OgnjanovićZ.(eds)不确定性推理中的符号和定量方法。 ECSQARU2019。计算机科学讲座,第11726卷。ChamSpringer。 ...
Linux代码调试
YUE110YUE的博客
03-08 186
Linux代码调试 一、检查内存泄漏 1.Valgrind 二、调试代码
linux怎么调试代码,手把手教你调试Linux C++ 代码
weixin_39926749的博客
05-12 221
手把手教你调试Linux C++ 代码软件调试本身就是一项相对复杂的活动,他不仅要求调试者有着清晰的思路,而且对调试者本身的技能也有很高的要求。Windows下Visual Studio为我们做了很多的工作,使初学者基本上可以获得一个所见即所得的调试体验,相对来说也比较容易上手。然而在linux平台下,一切都显得有些不同,倒不是说GDB有多难,只是对于习惯了visual studio的人来说刚开始...
Linux代码调试
rhy2K3的专栏
10-24 431
查内存泄漏可以用mtrace 需要装gcc-util库,lib?gd?库 引用mtrace的头文件 在代码段前面加上设置mtrace环境变量的代码 在需要查的代码段上加mtrace(), muntrace()函数 编译代码段 使用mtrace命令生成log 查看log 内核模块crash调试: objdump 模块代码 分析符号表 在模块中设置NULL指针或者flag,查
Linux c 下代码调试
明风的博客
09-22 509
root@xuanfei-desktop:~/cpropram/2# cat global.h //头文件 #ifndef CLOBAL_H         #define GLOBAL_H         #include         int funca(void);         int funcb(void); #endif root@xuanfei-desktop:~
Linux代码调试工具
IEE2285的博客
07-16 447
调试工具 GDB 启动GDB的方式 # 直接对可执行程序进行GDB调试 gdb program # 调试运行程序和core文件 gdb program XX.core #对于服务程序,指定服务运行时的进程ID,GDB会自动attach并调试 gdb program <program_pid> 查看堆栈信息 # 打印堆栈信息 bt # 将当前栈帧设置为args(编号或Address)指定的栈帧,并打印该栈帧的简要信息。 frame args # 例如: frame 7 # 打印指定栈帧的
Linux代码调试----gdb使用介绍
qzt__l0ve的博客
11-28 2064
linux gbd的使用方法。 gdb打断点 gdb调试运行 gdb显示代码 gdb删除断点 gdb调试过程中显示变量的值
Linux调试C++代码具体方法
Aurora_zZ的博客
01-05 795
Linux调试C++代码具体方法
类比思想在数学方面的研究
06-12
在数学领域,类比思想同样具有重要的作用。数学中的许多概念和理论都可以通过类比应用到其他领域中去,从而得到更广泛的应用。 例如,数学中的向量和矩阵可以类比应用到物理、工程、计算机科学等领域中去,从而得到更广泛的应用。又如,数学中的群论、环论和域论等代数结构理论可以类比应用到计算机科学中的编程语言设计、计算机网络安全等领域中去。 此外,类比思想还可以在数学教学中发挥重要作用。通过将抽象的数学概念类比为具体的物体或场景,可以帮助学生更加深刻地理解和记忆这些概念。 总之,类比思想在数学领域中具有重要的作用,可以帮助人们更好地理解和应用数学知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • [入门篇]Linux操作系统fork子进程的创建以及进程的状态 超超超详解!!!我不允许有人错过!!! 5373
  • Linux中你必须学习的软件安装工具yum(以及必须得安装的软件) 5146
  • 你想知道刷题的秘密吗?一篇博客让你明白什么是OJ题,如何刷OJ题,并深入浅出的带你刷遍顺序表的OJ题(小白必看) 5001
  • Linux权限全面解析 (欢迎各位Linux选手看过来,读到就是赚到) 3442
  • [入门篇]Linux进程优先级详解,我不信你看不懂 3063

分类专栏

  • Linux操作系统-系统编程 19篇
  • 数据结构-C语言实现 16篇

最新评论

  • [入门篇]初识操作系统OS(这篇博客将帮你打开操作系统OS大门的第一步 超超超超超详细)

    C_行在世间: 好好好表情包

  • [入门篇]Linux操作系统fork子进程的创建以及进程的状态 超超超详解!!!我不允许有人错过!!!

    不过普通话一乙不改名: 好文章!如果能加上fork子进程的时候,PCB里边的段表和页表的copy的细节就更好了。

  • 一篇博客告诉你什么是时间复杂度和空间复杂度(没有基础也能看懂)(这是学习数据结构及算法所必须掌握的基础)

    CSDN-Ada助手: 多亏了你这篇博客, 解决了问题: https://ask.csdn.net/questions/8012287, 请多输出高质量博客, 帮助更多的人

  • 如何快速使用云服务器安装并使用Linux操作系统 (搭建Linux环境-梦开始的地方)

    锐策: 谢谢博主,真的简单易懂!

  • [Linux入门篇]一篇博客解决C/C++/Linux System Call文件操作接口的使用

    小夜030: 写的非常详细,学到了,互关呀

最新文章

  • [Linux入门篇]一篇博客解决C/C++/Linux System Call文件操作接口的使用
  • 论如何用C语言的数组手撕一棵特殊的完全二叉树----堆
  • 【数据结构】关于二叉树你所应该知道的数学秘密
2023年14篇
2022年24篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源银星读书xml文件怎么打开3d蜜桃成熟尸位素餐是什么意思淄博宝宝起名起名用歆字寓意好么中央五台在线直播魔能科技时代楚河汉街的遗迹在哪个省傅姓起什么名字好女生起什么名字好佛山电信宽带温暖的作文通讯器材公司起名无心法师第一季百度云医疗设备公司起名取名安徽卫视回放巴特鱼庄斗牛赢钱爆裂战士战蓝宝属猪2019年运势晴雅集下架王一什么男孩起名2018庆余年全文阅读巡回检察组43全集结局公猫起名字邓氏男孩起名字大全大全鸡蛋装饰圆桌武士姓刘光字辈起名淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化