【嵌入式Linux】<知识点> GDB调试(更新中)

news2024/9/24 13:25:39

文章目录

前言

一、GDB调试预备工作

二、GDB的启动与退出

三、GDB中查看源代码

四、GDB断点操作

五、GDB调试指令


前言

在专栏【嵌入式Linux】应用开发篇_Linux打工仔的博客中,我们已经写了大量的源程序。但是在调试这些程序时我们都是通过printf大法和肉眼除错法。对于较大工程项目来说,这样的调试效率低。因此,有必要学习GDB调试技巧,提升瞄准bug的能力和开发效率。若涉及版权问题,请联系本人删除!


一、GDB调试预备工作

【1】源程序:包含.c源文件和.h头文件等。若工程较大,可以编写Makefile文件来管理,并在Makefile文件中添加gcc指令的选项-g。

【2】调试选项:在采用gcc指令来编译源程序时,加上-g选项来生成带有源程序信息的可执行文件,用于调试。(因此,该可执行文件会比平常的文件大)

【3】其它选项:-Wall打开所有警告;-O0关闭编译器优化。

【4】使用举例:当前源文件为hello.c,那么执行以下指令就能生成用于gdb调试的可执行文件hello。

gcc hello.c -g -Wall -O0 -o hello

二、GDB的启动与退出

【1】介绍:gdb是一个应用程序,但我们使用gdb  可执行文件的指令就能创建gdb进程。打开gdb后,目标程序并未开始执行,需要我们输入相关指令,如下所示:

【2】设置命令行参数:set  args  参数1  参数2 ...   注意:这里的参数是从argv[1]开始的。

【3】查看命令行参数:show args

【4】运行目标程序:run(简写为r)从main函数开始顺序执行,若遇到断点则停留。

【5】运行目标程序:start   停留在main函数的第一行代码,往后执行需要输入continue(简写为c)。

【6】退出gdb:quit  简写为q


三、GDB中查看源代码

【1】查看当前文件代码:list(简写为l)默认的当前文件为main函数文件,默认显示10行

  • 查看指定行号:list  行号
  • 查看指定函数:list  函数名

【2】切换文件查看:切换到哪个文件,哪个文件就变成了当前文件

  • 查看指定行号:list  文件名:行号
  • 查看指定函数:list  文件名:函数名

【3】设置显示行数:set  listsize  行数

【4】查看显示行数:show  listsize


四、GDB断点操作

【1】设置普通断点(当前文件):break  行号;②break  函数名。break可以简写为b。

【2】设置普通断点(其它文件):b  文件名:行号;②b  文件名:函数名

【3】设置条件断点:b  行号  if  变量名=某个值

【4】查看断点信息:i  b   全称是info break。

【5】删除断点:delete指令,简写为d

  • 删除指定编号断点:d  断点编号1  ...  例如:d  4 5 8  就是删除了编号为4、5、8的断点。
  • 删除连续编号断点:d  断点编号i-断点编号j  例如:d  1-5  就是删除了编号为1、2、3、4、5的断点。

【6】设置断点无效:disable指令,简写为dis

  • 无效指定编号断点:dis  断点编号1 ...
  • 无效连续编号断点:dis  断点编号i-断点编号j

【6】设置断点有效:enable指令,简写为ena

  • 有效指定编号断点:ena  断点编号1 ...
  • 有效连续编号断点:ena  断点编号i-断点编号j

五、GDB调试指令

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络(一)——初始网络

文章目录 计算机网络的背景网络发展认识 "协议" 网络协议初识协议分层网络分层 网络传输基本流程数据包封装和分用网络中的地址管理认识IP地址认识MAC地址 计算机网络的背景 网络发展 独立模式:计算机之间相互独立 在最早的时候,计算机之间是相互独立的&…

【启明智显分享】乐鑫HMI方案4.3寸触摸串口屏应用于称重测力控制仪表

称重测力控制仪表是将称重传感器信号(或再通过重量变送器)转换为重量数字显示,并可对重量数据进行传输、储存、统计、打印的电子设备,常用于工农业生产中的自动化配料,称重,以提高生产效率。随着工业化的发…

Oracle11g_RAC for vmware workstation 安装教程(on suse11)

一、前言 本文介绍在vmware workstation环境下,基于suse11sp1操作系统安装Oracle11g RACASM 数据库(两节点)。 1.1 RAC中的基本概念 安装ORACLE RACASM前,您可能需要事先简要的了解RAC,CRS,ASM的概念。 1.1…

【Linux】01.Linux 的常见指令

1. ls 指令 语法:ls [选项] [目录名或文件名] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息 常用选项: -a:列出当前目录下的所有文件,包含隐藏文件…

java 实验一:Java集成开发环境的搭建

一、实验目的 1、掌握Java集成开发环境的搭建方式,重点掌握JDK/Eclipse的安装,同时熟悉开发环境的使用; 2、重点掌握JDK/Eclipse的安装,同时熟悉开发环境的使用; 3、会使用输出语句在命令行输出信息; 4…

智能合约和分布式应用管理系统:技术革新与未来展望

引言 随着区块链技术的不断发展,智能合约和分布式应用(DApps)逐渐成为数字经济中的重要组成部分。智能合约是一种自执行的协议,能够在预设条件满足时自动执行代码,而无需人工干预或中介机构。这种自动化和信任机制极大…

学习网络的第一步:全面解析OSI与TCP/IP模型

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello,大家好!我是你们的好朋友小米。今天我们来聊一聊网络基础知识中的重量级选手——OSI模型和TCP/IP模型!网络的世界就像一个巨大的迷宫,而这两个…

Hadoop简明教程

文章目录 关于HadoopHadoop拓扑结构Namenode 和 Datanode 基本管理启动Hadoop启动YARN验证Hadoop服务停止Hadoop停止HDFS Hadoop集群搭建步骤准备阶段Java环境配置Hadoop安装与配置HDFS格式化与启动服务测试集群安装额外组件监控与维护: 使用Docker搭建集群使用Hado…

SQL构造一个触发器audit_log

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 构造一个触发…

华为如何做成数字化转型?

目录 企业数字化转型是什么? 华为如何定义数字化转型? 为什么做数字化转型? 怎么做数字化转型? 华为IPD的最佳实践之“金蝶云” 企业数字化转型是什么? 先看一下案例,华为经历了多次战略转型&#xf…

Python数据分析-乳腺癌诊断分析预测

一、研究背景 乳腺癌是全球女性中最常见的癌症之一,发病率和死亡率都处于较高水平。据世界卫生组织(WHO)统计,乳腺癌每年造成数百万女性的死亡,并且其发病率在许多国家呈上升趋势。乳腺癌的早期诊断对于提高患者的生存…

气膜仓储与传统仓储的成本优势对比—轻空间

随着物流和仓储需求的不断增长,企业对仓储设施的要求也日益提高。传统仓储设施虽然具有一定的优势,但在建设和运营成本上往往较高。近年来,气膜仓储作为一种新型仓储方式,以其独特的优势逐渐受到市场青睐。轻空间将详细探讨气膜仓…

小程序创建与项目初始化(构建 npm + 集成 Sass)

一、打开微信开发者工具 确认 左侧导航栏是否选中的 小程序点击 【】创建小程序 二、创建小程序 三、初始化 清空 app.wxss、app.js 去掉 rendererOptions 和 componentFramework 不需要最新的搜索引擎 留下以下文件 四、自定义构建 npm 集成 Sass 首先 先把小程序源…

如何使用Python正则表达式解析多行文本

使用 Python 的正则表达式来解析多行文本通常涉及到使用多行模式(re.MULTILINE)和 re.DOTALL 标志,以及适当的正则表达式模式来匹配你想要提取或处理的文本块。以下是一个简单的示例,展示了如何处理多行文本: 1、问题背…

maven编码报错

maven 编译的时候编码报错: classworlds For input string: "ㄻ孛孛"报错原因: maven 编码使用的是UTF-16 ,系统中使用UFT-8 解决办法: 如下设置为UTF-8

SSM社区物业管理系统-计算机毕业设计源码91276

摘要 随着城市化进程的加快,居民社区的规模和数量不断增长,传统的人工管理方式已经无法满足管理需求。借助信息技术和互联网应用,社区物业管理系统可以实现物业管理信息的集中化、自动化和便捷化,提供全方位的管理和服务支持。社区…

PostgreSQL17索引优化之支持并行创建BRIN索引

PostgreSQL17索引优化之支持并行创建BRIN索引 最近连续写了几篇关于PostgreSQL17优化器改进的文章,其实感觉还是挺有压力的。对于原理性的知识点,一方面是对这些新功能也不熟悉,为了尽可能对于知识点表述或总结做到准确,因此需要…

Linux之文件fd

个人主页:点我进入主页 专栏分类:C语言初阶 C语言进阶 数据结构初阶 Linux C初阶 C进阶​ ​​​​算法 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂 目录 一.文件内容的回顾 二.提炼一下对文件的…

狂飙的鸭子,哪里跑!安定的力量(深度好文)——早读(逆天打工人爬取热门微信文章解读)

容我也来卖个小聪明,学习洞见,深度好文 引言Python 代码第一篇 洞见 安定的力量(深度好文)第二篇结尾 引言 老刺激了 骑着自行车在路上狂摇 刚刚好赶上打卡时间 早上一切很平和 听书 吃绿豆饼茶 做早餐 准点一天的排泄 老天估计…

快手矩阵系统:一键发布,多平台自动文案生成

在当今信息爆炸的时代,自媒体平台的崛起为用户提供了广阔的展示舞台。然而,对于内容创作者来说,如何高效地在多个平台上发布内容,同时保持文案的吸引力和独特性,一直是一个不小的挑战。幸运的是,随着技术的…