【Linux杂货铺】调试工具gdb的使用

49bae2e517414f4fb2dc54f8d5a619c2.png


 

目录

🌈前言🌈

📁背景介绍

📁 使用

list [行号] / [函数名] 

run/r

break/b  [行号] / [函数名]

info break

disable break

enable break

delete break [断点编号]

next/n

step/s

continue/c

finish

print/p  [变量] / [表达式]

set [变量]

display  [变量名]

undisplay  [编号]

until

📁 总结


🌈前言🌈

        本期【Linux杂货铺】将讲解Linux中调试工具gdb的使用,各个参数的含义,如何在Linux中将代码调试起来,以及各个参数对应的在IDE中的含义。

 f7ed26b5f18541eb9655a245704f4683.png个人博客:秋刀鱼的滋味@-CSDN博客

 126aa96596b14e769a51621096d7961d.png系列专栏:Linux杂货铺_秋刀鱼的滋味@的博客-CSDN博客

 

📁背景介绍

        在程序发布方式中,有两种模式:debug模式 和 release模式。release模式下是不能进行调试的,所以在开发过程之中,使用的都是debug模式。

        Linux在使用 gcc/g++编译出二进制程序时,默认使用的是release模式。

        要使用gdb调试,必须在源代码生成的二进制程序的时候,加上 -g 选项。

 

//test.c
#include <stdio.h>                             
int AddToTarget(int start , int end)
{
    int i = start;
    int sum = 0;
    for(;i <= end;i++)
    {
        sum += i;
    }
    return sum;
}

int main()
{
    printf("run begin...\n");
    int result = 0;
    result = AddToTarget(1,100);
    printf("resylt : %d \n",result);
    printf("run end...\n");
    return 0;
}

        先创建test.c文件,写入代码。

        通过gcc test.c -o test-debug -g命令,生成test-debug文件。

        最后 gdb test-debug  调试代码

📁 使用

list [行号] / [函数名] 

list / l + 行号:显示源代码,接着上次的位置往下列,每次列10行,知道代码尾。

44e9985ba2e84894a0d99feec8667372.png

list / l + 函数名:列出某个函数的源代码。

ccb08dcc998d483f8f0be4843ac71c21.png

run/r

        运行程序,从开始连续而非单步执行程序。在VS中,相当于F5。

5cd8a94e04fa4f7ebca614be62d07291.png

c4b49b0fa85a498e891ecae38b7960ba.png

break/b  [行号] / [函数名]

        在某一行或者某某个函数开头设置断点。在VS中相当于F9。

cc45fcc8657a42d1b1ca46c82de54bde.png

info break

        查看断点。其中断点是按编号操作的,编号按照创建顺序给出。

cc9e264f3c1f495dbe6f56513a2ff694.png

44aa343b85ab4cbfb2f165cc5d33456e.png

disable break

        禁用断点。

4511c075c8fa4b03bd312c6ef39b9521.png

        Enb表示断点是否启用,是的话参数为y,禁用为n。

enable break

        启用断点。

f1b0669e8409485e99e2d6500e5a194c.png

delete break [断点编号]

        删除断点。        

ba08ef2592da44a0b226fc770dbae100.png

next/n

        单条执行。但必须在程序run之后才能使用。run是调试,但不能一行的操作,所以必须配合断点b来使用n。

        在VS中next相当于F10,逐过程调试,不会进入函数体内部进行查看。

1557d1fbab6f45ba867664df00389310.png

f346a725a475426f881330a0aaf244f0.png

489043f05da7419791bf6ce25a90bb51.png

step/s

        进入函数调用调试。在VS中,相当于F11

b9da1307ba4d45b183d6c77b53cddd46.png

bdd26e4a3618408294a1ad5fb1c72351.png

continue/c

        从当前位置开始连续而非单步执行程序。相当于在执行到断点后,run程序。

b90df00a135b4306b6fed875c56f6655.png

finish

        执行到当前函数返回,然后等待接下来的命令。如我们step到函数内部,不想调试函数内部信息,只想查看函数执行完结果,可以使用finish,

47508e56e39849f98b2a3029e2ef844b.png

print/p  [变量] / [表达式]

        打印变量或者表达式的值。

6d75adba681348468d28dad2de9d5403.png

set [变量]

        修改变量的值。

690bd86248e04707a4f73f3f0f67d89b.png

display  [变量名]

        跟踪查看一个变量,你每次停下都显示它的值。在VS中,相当于监视窗口。

4c9e4843880b4c0fbc7f3e4466df5954.png

undisplay  [编号]

        取消先前的那些变量的跟踪

c7ad800f46a14db893e3f067293503d9.png

until

        跳转到指定行,中间的代码都是运行的。

503f84b16d6e4f069dff20f6a43b2eea.png

📁 总结

        以上,我们就对Linux中调试工具gdb做了讲解,包括了如何生成可调式版的代码,如何去调试等一系列内容,总体上来说非常简单,只需要多加练习即可。

        以上,就是本期【Linux杂货铺】的内容了,如果感觉对你有帮助,欢迎点赞,收藏,关注,Thanks♪(・ω・)ノ。

672be12c4f1b40cbbda500696c820308.gif

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/423283.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

旧的Spring Security OAuth已停止维护,全面拥抱新解决方案Spring SAS

Spring Authorization Server 替换 Shiro 指引 背景 Spring 团队正式宣布 Spring Security OAuth 停止维护&#xff0c;该项目将不会再进行任何的迭代 目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用作为 SpringBoot 3.0 的最新…

Redis--事务机制的详解及应用

Redis事务的概念&#xff1a; Redis事务就是将一系列命令包装成一个队列&#xff0c;在执行时候按照添加的顺序依次执行&#xff0c;中间不会被打断或者干扰&#xff0c;在执行事务中&#xff0c;其他客户端提交的命令不可以插入到执行事务的队列中&#xff0c;简单来说Redis事…

Springboot接口参数校验

在设计接口时我们通常需要对接口中的非法参数做校验&#xff0c;以降低在程序运行时因为一些非法参数而导致程序发生异常的风险&#xff0c;例如登录的时候需要校验用户名密码是否为空&#xff0c;创建用户的时候需要校验邮件、手机号码格式是否准确。如果在代码中对接口参数一…

AOP案例(黑马学习笔记)

需求 需求&#xff1a;将案例中增、删、改相关接口的操作日志记录到数据库表中 ● 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时&#xff0c;需要详细的操作日志&#xff0c;并保存在数据表中&#xff0c;便于后期数据追踪。 操作日志信息包含&#xff1a; ●…

基于HT32的智能家居demo(蓝牙上位机)

参加合泰杯作品的部分展示&#xff0c;基于HT32的智能家居&#xff0c;这里展示灯光的相关控制&#xff0c;是用蓝牙进行的数据透传&#xff0c;参考了一些资料&#xff0c;美化封装了一下之前的上位机界面。 成果展示 点击主界面的蓝牙设置&#xff0c;进行连接&#xff0c;下…

Android和Linux的嵌入式开发差异

最近开始投入Android的怀抱。说来惭愧&#xff0c;08年就听说这东西&#xff0c;当时也有同事投入去看&#xff0c;因为恶心Java&#xff0c;始终对这玩意无感&#xff0c;没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业&#xff0c;所以只能回过头又来学。 首先还是…

编码规则转换

思考&#xff1a; 如何将一个机内码转换为区内码&#xff1f; 只要将机内码减去 A0A0 就可以啦 如果只让我们用加法器来解决呢&#xff1f; 注意我们的数据占用了 32 位&#xff0c;如果想用补码进行减法运算的话&#xff0c;符号位怎么办&#xff1f;&#xff1f;&#xf…

了解Spring中Bean:配置与作用域

作为一名对技术充满热情的学习者&#xff0c;我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代&#xff0c;我远非专家&#xff0c;而是一位不断追求进步的旅行者。通过这篇博客&#xff0c;我想分享我在某个领域的学习经验&#xff0c;与大家共同探讨、共…

Linux和Windows集群中部署HTCondor

目录 1、集群架构 2、HTCondor版本 3、Linux系统安装 3.1、HTCondor安装 3.2、中央管理节点配置 3.3、其他节点配置 4、Windwos系统安装 5、安全配置 6、参考 1、集群架构 操作系统IP地址1*Ubuntu22.04192.168.1.742Ubuntu22.04192.168.1.603Ubuntu22.04192.168.1.6…

python3装饰器

装饰器 它允许你修改函数或类的行为&#xff0c;而不更改其源代码。实质上&#xff0c;装饰器是接受另一个函数作为参数并返回一个包装原始函数的新函数。这样&#xff0c;你可以在不修改原始函数的情况下&#xff0c;添加一些额外的功能或逻辑。 def time_cost(func):"…

Java 数组(详细)

目录 一、数组的概述 1. 数组的理解&#xff1a; 2. 数组相关的概念&#xff1a; 3. 数组的特点&#xff1a; 4. 数组的分类&#xff1a; 5.数据结构&#xff1a; 二、一维数组 1. 一维数组的声明与初始化 2. 一维数组元素的引用&#xff1a; 3. 数组的属性&#xff1…

期货开户金融期货的种类

金融期货概念及其种类有哪些&#xff1f;期货种类分为商品期货、金融期货、和期货期权。金融期货是期货的其中一个种类&#xff0c;它是以证券&#xff1b;货币、汇率&#xff0c;利率等金融产品作为买卖标的的期货品种。金融期货交易产生于本世纪70年代的美国市场&#xff0c;…

项目解决方案: 实时视频拼接方案介绍(中)

目 录 1.实时视频拼接概述 2.适用场景 3.系统介绍 4. 拼接方案介绍 4.1基于4K摄像机的拼接方案 4.2采用1080P平台3.0 横向拼接 4.2.1系统架构 4.2.2系统功能 4.2.3方案特色 4.2.4适用场景 4.2.5设备选型 4.3纵横兼顾&#xff0c;竖屏拼接 4.3.1系统…

从下一代车规MCU厘清存储器的发展(2)

目录 1.概述 2.MCU大厂的选择 2.1 瑞萨自研STT-MRAM 2.2 ST专注PCM 2.3 英飞凌和台积电联手RRAM 2.4 NXP如何计划eNVM 3.小结 1.概述 上篇文章&#xff0c;我们简述了当前主流的存储器技术&#xff0c;现在我们来讲讲各大MCU大厂的技术选择 2.MCU大厂的选择 瑞萨日…

取送货问题(Pickup and Delivery Problem)

取送货问题及其变体 广义取送货问题&#xff08;General Pickup and Delivery Problems&#xff0c;GPDP&#xff09;可以分为两类&#xff1a; Vehicle Routing Problems with Backhauls&#xff0c;VRPB&#xff1a;从配送中心&#xff08;depot&#xff09;取货运输货物到客…

VUE3:省市区联级选择器

一、实现效果 二、代码展示 <template><div class"page"><select v-model"property.province"><option v-for"item in provinces" :key"item">{{ item }}</option></select><select v-model&…

RabbitMQ-消息队列:优先级队列、惰性队列

20、优先级队列 在我们系统中有一个订单催付的场景&#xff0c;我们的客户在天猫下的订单&#xff0c;淘宝会及时将订单推送给我们&#xff0c;如果在用户设定的时间内未付款那么就会给用户推送一条短信提醒&#xff0c;很简单的一个功能对吧。 但是&#xff0c;天猫商家对我…

Stable Cascade-ComfyUI中文生图、图生图、多图融合基础工作流分享

最近 ComfyUI对于Stable Cascade的支持越来越好了一些&#xff0c;官方也放出来一些工作流供参考。 这里简单分享几个比较常用的基础工作流。 &#xff08;如果还没有下载模型&#xff0c;可以先阅读上一篇Stable Cascade升级&#xff0c;现在只需要两个模型&#xff09; &a…

春游和女儿穿这套,超美

质感满满的牛仔套装&#xff0c;简直不要太好看 出游的时候亲子装考虑一下哈哈 经典版型&#xff0c;线条流畅&#xff0c;洋气又舒适 而且用的是防褪色的牛仔面料&#xff0c;耐脏又实穿 日常外出都可以穿&#xff0c;时髦又闲适 上衣做的真口袋实用又美观&#xff0c;版…

实战 | 使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)

导 读 本文主要介绍使用YOLOv8图像分割实现路面坑洞检测&#xff08;步骤 代码&#xff09;。 背 景 如上图所示&#xff0c;现实生活中路面坑洞对车辆和驾驶员安全来说存在巨大隐患&#xff0c;本文将介绍如何使用YoloV8图像分割技术来检测路面坑洞&#xff0c;从而提示驾…