GDB调试器原来那么简单!

嵌入式资讯精选 2020-10-15 00:00

GDB简介

GDB(GNU Debugger)是一个强大的命令行调试工具。一般的,在Windows下进行开发,很少操控命令行调试,调试器大多与编译器都集成在IDE里了。

当然,在Windows下也可以直接使用gcc、gdb来做编译调试我们的C程序,如MinGW( 一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合 )中就同时包含有gcc与gdb工具:


使用gdb -v命令可查看gdb的版本:


但是,在Linux下进行开发,gdb工具是必知必会的工具之一。

小编最近也转战Linux了,自然也要掌握一些必知必会的基础工具及知识。小编也是用到哪学到哪,本篇笔记我们先来分享gdb的使用:

实例演示GDB的使用

老读者们都知道,本公众号文章的特点之一就是实例比较多、可操作性比较强,跟着文章一步一步做应该可以学到一些东西。

同样的,本篇笔记我们也以实例来做分析。

示例代码gdb_test.c:

左右滑动查看全部代码>>>

// 公众号:嵌入式大杂烩
// 作者:ZhengN
#include <stdio.h>

// 测试函数1
void test0(void)
{
 int i = -1;

 if (i = 0)
  printf("i = %d\n", i);
 else if (i = 1)
  printf("i = %d\n", i);
 else
  printf("i = %d\n", i);
}

// 测试函数2
void test1(void)
{
 int a[10] = {0,1,2,3,4,5,6,7,8,9};
 int *p = &a[1];
 int *p1 = (int*)(&a + 1);

 printf("p[6] = %d\n", p[6]);  
 printf("*(p1 - 1) = %d\n", *(p1 - 1));  
}

// 主函数
int main(int argc, char *argv[])
{
    test0();
    test1();
    
    return 0;
}

这个示例代码中有两个测试函数,其实也是两道经典易错的面试笔试题。大家可以先思考一下结果是什么。

下面我们使用gdb来一步一步调试及分析,在Windows下做实验,Linux下的操作类似。

一般的,我们使用如下命令来编译:

gcc gdb_test.c -o gdb_test.exe

这样编译出来的gdb_test.exe是不带调试信息的。我们必须编译出带有调试信息(如行号等信息)的可执行文件才能使用gdb进行调试。在以上基础上加个-g参数即可生成调试信息。

除此之外,我们编译时应不使用优化选项,若使用优化,则编译器会对程序进行一些优化,有可能会更改语句的顺序及优化一些变量,从而可能会导致程序执行流程与源码流程不匹配的情况。

进一步,可以使用-Wall参数打开所有警告,所以我们的编译命令变为:

gcc -g -Wall gdb_test.c -o gdb_test.exe

1、GDB常用命令

下面粗略地列出一些常用的命令:

2、demo调试分析

使用上面的编译命令编译得到带调试信息的可执行程序gdb_test.exe,有两种方法启动调试。

一种方法是先输入gdb命令进入gdb环境,再输入file+可执行程序装入调试文件,即:


另一种方法是直接输入gdb+可执行程序对该程序进行调试,即:

(1)调试测试函数1

上面的测试函数1大家思考得出结果了吗?我们单步调试看看结果是怎么样的:

① 在test1函数入口打个断点:

② 运行到断点处:

③ 单步往下执行:


显然,单步运行到了这一句我们就得出了测试函数1的结果,即输出 i = 1。大家分析得对了吗?

这要是不注意还真的容易出错,这里的if判断条件里用的是=号,而不是==号,这个小陷阱可能会迷惑一些初学C语言的朋友。

if语句的通用形式为:

if (expression)
 statement

可以明确的是:如果对expression为真(非0),则执行statement。本题中,如if (i = 0)其实就等价于

i = 0;
if (i)

显然这里的if语句的expression为假,不会执行statement。

类似的if (i = 1)等价于

i = 1;
if (i)

显然这里的if语句的expression为真,执行statement。

平时在发现自己写的代码执行的流程异常时,不妨debug调试一下,一步一步地走,看程序是否按照自己设计的流程走,看是不是我们的执行逻辑设计错了。

(2)调试测试函数2

测试函数2也是一道极其经典的面试题目。不能一眼看出结果?没关系,我们一起调试分析一下。接着上面的流程,我们输出quit命令推出gdb环境,再重新进入调试test2。

① 在test2函数入口打个断点:

② 运行到断点处:


此时,我们不妨看一下a[1]元素的地址a数组里面的内容是什么:


可见,在数组初始化之前,整个数组空间里的值是一些随机值。这里反映一个问题,局部变量在初始化之前的值是无规律的,所以不妨在定义局部变量的时候初始化一个确定的值,防止出错。

③ 单步往下执行:

此时,我们来看一下,指针变量p的值、a数组里的值:

因为此时第23行这条语句还未执行,所以p指向的地址还不是a[1]元素的地址。

再单步往下执行,然后我们看一下,指针变量p的值,及以指针变量p的值为首地址、往后偏移10个内存单元为结束地址,这一段空间内的值是什么:


至此,我们通过调试清晰地得到了p[6]的值。

继续单步往下执行,我们看一下,&a[0]的值、&a的值、(&a+1)的值、p1的值:


从gdb输出的信息我们知道&a的类型是(int (*) [10] ),即是一个指向含有10个元素的整形数组的指针,所以(&a+1)的意义是往后偏移10 * sizeof(int)。进一步,再利用一下其它输出的信息:

&a的值为0x61fee0
&a+1的值为0x61ff08


两个值相减得到40,正好是整个数组所占的字节数。

而p1是一个整形指针,所以p1-1指向的就是往前偏移sizeof(int)个字节的地址,即a[9]的地址(0x61ff04),所以*(p1 - 1)的值也就是a[9]的值。最后我们再看一下&a往后的40个地址里的值都是些什么:


以上就是本次的实例演示,只是用到了一小部分gdb的命令,还有更多命令大家可以自己练习使用,基本的会了,不懂的地方遇到的时候再查也来得及。

可能写得有些乱,但也希望能对大家有帮助。总之,对于一些不确定的知识点或者程序的执行与预期不相符时,不妨调试一下,一步一步看数据有没有异常。

1.第二届国产嵌入式操作系统技术与产业发展论坛即将在金秋十月杭州钱塘江畔召开

2.因为不满已有RTOS,所以作者写了它—ChibiOS!

3.操作系统产生死锁的原因和处理策略

4.你不知道的Linux使用技巧~

5.放弃 Windows 后 ,开源操作系统能成为主流桌面系统吗?

6.刚获得物理诺奖的数学家:现实是对完美数学真理的扭曲反应,人脑是最终量子计算机!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

登录阅读全文
  • 调试器
嵌入式资讯精选 掌握最鲜资讯,尽领行业新风
进入专栏
评论 (0)
  •  深度解析汽车音响功放和智能座舱电源应用
  • 马斯克盛赞:中国车企是迄今为止最具竞争力的

    电动知家 2024-06-22 141浏览
  • 技术|动力电池主要公开技术汇总

    锂电联盟会长 2024-06-22 136浏览
  • 活动预告|免费报名参加2024中国(深圳)汽车智能座舱技术大会

    JMInsights集摩咨询 2024-06-22 125浏览
  • 中国人自己的手机系统!华为纯血鸿蒙首创全新光追:每秒10+亿条光线

    硬件世界 2024-06-21 105浏览
  • 北方华创专注刻蚀、薄膜沉积、清洗和炉管等制程设备,2023年收入221亿元,新订单超300亿元

    半导体工艺与设备 2024-06-22 105浏览
  • 纯血鸿蒙,超越Linux;仓颉、自研IDE官宣;GaN收购大案完成

    电子工程世界 2024-06-22 103浏览
  • 华为重塑自动驾驶,纯血鸿蒙编程语言亮相,开发者大会杀疯了

    智能车参考 2024-06-22 87浏览
  • 微软总裁确认!将700多名中国员工移居海外

    集成电路IC 2024-06-23 81浏览
  • 4个问题,透彻理解HarmonyOS NEXT纯血鸿蒙

    黄烨锋 2024-06-23 00:34 72浏览
  • 细谈盘古大模型5.0和华为AI生态:深究关键技术点

    黄烨锋 2024-06-22 18:28 66浏览
  • 边缘端的“小号HBM”:华邦CUBE与传统DRAM有何不同?

    刘于苇 2024-06-22 12:50 52浏览
  • 美光台湾工厂火灾,官方回应厂区运营未受影响

    综合报道 2024-06-21 17:34 35浏览
  • 超声技术也能与脑机接口结合?双向非侵入式BCI新突破

    综合报道 2024-06-21 17:14 30浏览
  • 工信部:强化汽车芯片标准供给

    国际电子商情综合报道 2024-06-21 16:57 60浏览
  • 只需简单的无源接口,就能让NTC热敏电阻输出积极结果

    STEPHEN WOODWARD 2024-06-21 16:23 62浏览
  • 马斯克:正与首位脑机芯片受试者讨论植入第二代芯片

    综合报道 2024-06-21 15:40 47浏览
  • 鼎力合一,芯联集成拟收购芯联越州股权

    芯联集成 2024-06-23 10:20 0浏览
  • Rambus通过DDR5服务器PMIC扩展适用于高级数据中心内存模块的芯片组

    Rambus 2024-06-21 11:27 9浏览
  • 优化传感器性能的两大利器:测试表征和线性转换

    Bernard Ang 2024-06-20 17:13 18浏览
  • IAR通过多架构认证的静态分析工具加速代码质量自动化

    IAR 2024-06-20 11:20 9浏览
  • 2024Q1智能手机生产量呈现年增,预估第二季将季减5-10%

    TrendForce 2024-06-19 16:08 45浏览
  • 储能市场规模快速增长,2.3kV门极驱动器方案应运而生

    赵明灿 2024-06-18 17:11 50浏览
  • 【第三十八期】教你如何轻松看懂电路原理图

    面包板社区管理员 2024-06-17 385浏览
  • 米尔全志T527系列加推工控板和工控机,更多工业场景DEMO

    米尔电子嵌入式 2024-06-21 98浏览
  • 浪拓电子:电磁兼容(EMC)器件—半导体放电管(TSS)

    sales_263623713 2024-06-13 132浏览
  • 交流电源端口雷击浪涌防护器件 — 气体放电管

    sales_263623713 2024-06-12 136浏览
  • 中奖查询

    丙丁先生 2024-06-08 373浏览
  • DDS芯片AD9851用来分频 怎么计算有多少个频率能够落在1.7M±10%范围?如何计算?

    QWE4562009 2024-06-15 334浏览
  • 车载电机和工业用电机有什么不同?

    乱世煮酒论天下 2024-06-08 205浏览
  • 详解半导体类防护器件|浪拓电子

    sales_263623713 2024-06-07 126浏览
  • 【有奖征集】主题:EMC整改,问题!案例!归纳!总结!

    面包板社区管理员 2024-06-14 384浏览
  • 浪拓B3D090L-C SMD,5x7.6mm 90V/5KA 气体放电管

    sales_263623713 2024-06-17 75浏览
  • 对压电陶瓷换能器的参数谁了解的?

    QWE4562009 2024-06-11 1054浏览
  • CYCLONE V的TDC设计

    sSSSSSoda 2024-06-14 132浏览
  • 掌握ZigBee无线通讯技术的关键知识点

    21ic 2024-06-21 33浏览
  • 压力传感器调试常见问题有哪些?

    21ic 2024-06-21 36浏览
  • 三分钟了解4种不同类型的ADC

    21ic 2024-06-21 25浏览
  • CMOS传感器原理和三大性能影响

    21ic 2024-06-21 43浏览
  • ECU智能:电子控制单元在汽车领域的应用与优势

    2024-06-20 37浏览
  • 电工面试题画电路图,你会吗?

    2024-06-21 39浏览
  • 新能源汽车慢充系统故障及解决方案

    2024-06-20 44浏览
  • 西门子、三菱PLC基本编程指令

    2024-06-21 41浏览
  • DC/DC芯片内部电路设计原理和结构

    2024-06-20 49浏览
  • SAR ADC模拟输入信号类型

    21ic 2024-06-21 23浏览
  • 汽车数据的核心技术CAN总线PPT教程

    2024-06-20 30浏览
  • 83、基于51单片机0-10V电压表电路图及程序
  • 86、基于51单片机数码管数字钟电路图及程序
  • 系统架构设计师第二版教程(最新版)
  • 84、基于51单片机0-20V电压表4094驱动数码管显示电路图及程序
  • 88、基于51单片机DS18B20温度检测上下限报警proteus仿真及电路图程序元件清单
  • 东芝TB5128FTG步进电机驱动IC产品规格书datasheet
  • 87、基于51单片机ADC0832双路电压0-5v检测电路图及程序
  • 机器人手册:第1卷-机器人基础
  • 系统架构设计师2013至2018年试题分析与解答
  • 单片机C语言实例(400例)
  • 大数据工程师2024版(37周)
  • 示波器的带宽增强技术
  • 嵌入式产品如何做安全加密?
    1. 版权保护芯片RJGT102介绍为了防止硬件电路与固件被抄袭,核心在于加密芯片和安全解决方案的设计,目前大多MPU并不具备安全防护功能,所以最好的办法是使用一颗专用的加密芯片,通过加密芯片对接MPU,进行认证,授权,保存关键数据等。RJGT102采用了SHA256对称加密算法,256位的大数加密, 加密算法强度高。每片RJGT102都有唯一的客户编码,非常适合做防抄板,防抄软件,管控工厂生产数量,防止方案外泄等。参与SHA256运算的数据为:8字节Key(可动态更换),8
    万象奥科 2024-06-20 17:37 114浏览
  • TT电机(直流电机)的功率、电压、电流、瞬间启动电压和电流
    TT电机(直流电机)的功率、电压、电流、瞬间启动电压和电流是其运行的关键参数。这些参数决定了电机的性能和适用场景**。在探讨TT电机的这些特性时,需要综合考虑其电气特性以及启动和运行条件。以下将逐一解析这些关键参数: 1. 功率:    - TT电机的功率通常取决于其设计和应用场景。例如,普通TT电机的额定功率可以在几瓦到几十瓦不等[^4^]。    - 对于不同的TT电机型号,如370电机和310电机,它们的功率输出也会有所不同。例如,370电机通常适
    丙丁先生 2024-06-21 17:18 130浏览
  • 驾校OBD接入CAN总线数据大众朗逸仪表网关位置
    在汽车的复杂电路网络中,仪表网关扮演着信息枢纽的角色。对于驾校使用大众朗逸车主而言,了解仪表网关的位置不仅有助于日常维护,更是故障诊断和车辆升级的关键所在。大众朗逸作为一款深受消费者喜爱的车型,凭借其稳定的性能和经济的油耗赢得了广泛的市场认可。然而,即便是这样一款优秀的车型,在驾校使用过程中也难免会遇到一些技术问题,这时候对仪表网关的了解就显得尤为重要。18年后的大众,网关都是标配,直接从OBD通过CAN监听是没有数据报文对外发出的,不是没有,而是避开诊断请求,这个后边说。朗逸CAN总线技术的引
    lauguo2013 2024-06-21 08:18 134浏览
  • 为什么我的显示器有影音不同步的困扰?立即检视4大常见警讯
    电脑显示器已逐渐成为现代人时常会接触到的3C产品,能带给消费者愉快的视听娱乐,不管是看电影、追剧、听音乐放松心情,或是玩一场紧张刺激的电竞游戏。忙碌之余,能够偶尔享受闲暇时光,也是一种释放。 您是否也曾遇过,在享受电影或游戏的过程当中,显示器带给我们的影像和声音突然出现不协调的情况呢?这就像是两者间没有互相搭配好,节奏步调变得不一样!这种情况我们称为「影音延迟」或「影音不同步」。 当这类问题持续发生时,无法好好享受电影或者追剧,会让人心情烦躁。对于电竞玩家来说更是硬伤,除了分心、受干扰外,更
    百佳泰测试实验室 2024-06-20 15:55 123浏览
  • 2024年6月11日树莓派正式上市!
    ​Raspberry Pi 已在伦敦证券交易所上市,股票代码为 Raspberry Pi Holdings plc。这是 Raspberry Pi 的分水岭,也是发展新阶段的开始:进入公开市场将使树莓派能够更快地制造出更多我们喜爱的产品。Raspberry Pi 基金会在首次公开募股中筹得的资金将支持其在第二个十年中影响全球的雄心壮志;有关首次公开募股对基金会意味着什么的更多信息,请点击这里查看菲利普的博文。博文地址:https://www.raspberrypi.org/blog/what-w
    树莓派开发者 2024-06-20 15:15 123浏览
  • 上海国际嵌入式展 - 基于树莓派5和CODESYS的16轴运动控制解决方案
    ​在为期三天的上海国际嵌入式展会中,树莓派和上海晶珩一起展示了众多的基于树莓派和CODESYS的解决方案,没去过展会现场的小伙伴千万别错过这篇文章!视频地址:https://www.bilibili.com/video/BV1c1421k7ne/?vd_source=a637ced2b66f15709d16fcbaceeb47a9这个基于Raspberry Pi 5的嵌入式系统解决方案集成了16个EtherCAT总线控制的步进电机,旨在实现高性能的多轴运动控制。Raspberry Pi 5作为核
    树莓派开发者 2024-06-21 14:29 113浏览
  • 难上加难!浅谈PCB高频特性、阻抗量测
    随着科技的进步不断更迭,电子设备的传输速度越来越快,时至今日对于高速传输带宽的要求也愈来愈高。印刷电路板(PCB,以下简称PCB) 在高速传输接口中扮演不可或缺的角色,其高频特性直接影响了整体传输效能。高频特性是指PCB在高频率下的电气性能,包括阻抗、插入损耗、回波损耗、群延迟等。这些参数会影响信号的传输速度、完整性和可靠性。 PCB潜在风险 你知道吗?如果PCB的高频特性不佳时,可能会导致以下问题: 信号传输速度变慢信号衰减增加信号反射增加信号失真 这些问题都会影响电子设备的性能,甚至
    百佳泰测试实验室 2024-06-20 16:05 144浏览
  • Matter本地控制实测大公开:智能装置在无外部网络环境下能否正常运作?
    Matter是连接标准联盟(CSA)所推出的统一连接标准,旨在让不同品牌的智能装置可以互通互联。并且支持包含Wi-Fi、Ethernet、Thread和Bluetooth等多种连接协议。 随着Matter被广泛运用于智能家居生态圈,目前Apple Homekit、Amazon Alexa、Google Home和Samsung SmartThings等智能语音助理都已支持Matter。然而,要是网络服务供货商的网络突然断线了,家里的智能装置是否还能正常操作?还是必需连接到外部网络才能控制智能装
    百佳泰测试实验室 2024-06-20 15:40 127浏览
  • LiDAR翻红,开启工业机器人新纪元
    站上风口,交付量狂飙,装机量翻番……是什么让LiDAR再次“翻红”? 一波三折。如果要用一个词形容近两年的激光雷达市场,恐怕它最为合适。人类纪元,2022年。开启量产元年的车载激光雷达,一度风光无限。当时OEM厂商对激光雷达关键指标提升的需求仿佛“军备竞赛”。加速批量上车,进一步控制成本,将其控制在500美元左右……那一年,产业链上下游众志成城,万众一心。转眼到了2023年,车企在面向ADAS和自动驾驶的感知技术上逐渐分化成两派,纯视觉路线的落地以及价格战带来的降本压力,让很多车企出现
    艾迈斯欧司朗 2024-06-21 17:10 136浏览
  • GPIO的功率、电压和电流
    GPIO的功率、电压和电流取决于具体的GPIO类型和配置。 GPIO(General Purpose Input/Output)通用型输入输出端口,是一种多功能的电子接口,广泛应用于微控制器、微处理器以及各种电子设备中,用于读取或输出信号。理解GPIO的功率、电压和电流的相关特性是进行电子电路设计和编程的基础。这些参数决定了GPIO端口能安全处理的电量,以及它与其他电子组件交互时的兼容性。 从电压角度来看,GPIO端口通常设计有一定的耐压限度,这意味着它们可以安全地在特定的电压范围内工作。例
    丙丁先生 2024-06-21 17:43 151浏览
  • 副边反馈反激电源芯片具体案例分析
    反激电源包含原边反激何副边反激,原边反馈动态响应比副边反馈慢,但是相对成本低,无论是原边反馈还是副边反馈由于反激电源电路简单,成本低广泛的用在在电动两轮车Escooter,电动工具,打印机,清洁电器等充电场景,也广泛的应用在电表,家电,新能源等场景作为辅助电源给芯片供电,下面就以无锡明芯微的MX1210E作为例子详细的介绍下一款24v2.5A的一个方案,从该方案来看输入口有NTC防止过流,采用10D561K 的压敏作输入过压保护,有个滤波的0.47uF的X电容并采用分压电阻做X电容放电,串联差模
    王萌 2024-06-21 09:27 287浏览
  • 低价围城的电商618:围在城里的都想逃出来
     经过近几年的618大促之后,如今的618已经被默认的低价竞争给包围了。随着低价竞争的持续蔓延,曾经积极参与其中的一些品牌商,态度也从积极转为消极;各种被“忽悠”的消费者,也在想着法逃离电商平台设置的套路。与此同时,不甘心被大主播绑架的电商平台,与胃口不断加大的头部主播,开始展开极限拉扯。以往热闹的618,如今变成了各路参与者的围城,渴望进去的不停向里面张望,渴望出来的则变着法地希望,跳出618这个牢笼。虚假繁荣背后的暗流涌动在直播电商红利之下,抖音、淘宝、京东、唯品会等各路平台,在直
    刘旷 2024-06-21 09:58 139浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦

深圳SEO优化公司福永网站推广西乡阿里店铺运营南联模板网站建设西乡企业网站制作坪地网站改版龙华网站优化推广南澳关键词按天扣费福田建设网站大运百姓网标王丹竹头阿里店铺运营南澳模板制作罗湖网站优化排名东莞网站优化排名观澜关键词按天计费罗湖网站推广系统福永网站seo优化布吉网站制作南山网站优化排名惠州营销型网站建设南澳网站优化排名坪地建站双龙SEO按天计费大芬网站定制宝安网站建设东莞网站seo优化同乐外贸网站建设大运网站制作民治建站沙井关键词按天扣费南联企业网站改版歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化