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

文章目录

前言

一、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.mzph.cn/diannao/45065.shtml

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

相关文章

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score)

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score) 前言相关介绍1. 准确率(Accuracy)2. 精确率(Precision)3. 召回率(Re…

Cadence23打开与关闭飞线,修改位号丝印大小

打开与关闭所有飞线: 显示部分飞线: 单独显示网络飞线尤为好用,点击上图中的网络,之后鼠标点击器件中你想高亮的网络即可单独打开部分飞线。 这里的关闭部分网络的飞线也很好用,可以临时关闭讨厌的GND飞线&#xff1a…

掌握Postman的API请求模板:一键生成,效率倍增

📘 掌握Postman的API请求模板:一键生成,效率倍增 Postman是API开发和测试的瑞士军刀,而其请求模板功能更是提升工作效率的利器。API请求模板允许用户定义一组可重用的请求配置,从而快速生成和发送API请求。本文将深入…

virturalBox+K8S部署jaeger-all-in-one

pod的yaml如下:这里使用的是主机host模式 apiVersion: apps/v1 kind: Deployment metadata:name: jaegerlabels:app: jaeger spec:replicas: 1selector:matchLabels:app: jaegertemplate:metadata:labels:app: jaegerspec:hostNetwork: truecontainers:- name: jae…

TF卡病毒是什么?如何防范和应对?

在存储芯片及存储卡领域,TF卡病毒是一个备受关注的话题。在本文中,拓优星辰将详细解释TF卡病毒的含义、来源以及如何防范和应对这一问题,帮助客户更好地了解和处理TF卡病毒的风险。 1. TF卡病毒的含义 TF卡病毒是指针对TF存储卡(T…

05:定时器中断

中断 1、定时器T0中断2、案例:通过定时器T0中断来实现灯间隔1s亮灭 1、当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方…

安装lap和cython_bbox失败了很多次!!!终于被我发现了!

先说 lap 试了很多种方式,pip install lap / conda install -c conda-forge lap … 全失败了后面发现 lap 不支持 python > 3.9 的版本使用 pip install lapx 成功! cython_bbox 更难了 一直提示缺少MicroSoft C 14.0 … 大家有需要自行下载&#x…

[PaddlePaddle飞桨] PaddleDetection-通用目标检测-小模型部署

PaddleDetection的GitHub项目地址 推荐环境: PaddlePaddle > 2.3.2 OS 64位操作系统 Python 3(3.5.1/3.6/3.7/3.8/3.9/3.10),64位版本 pip/pip3(9.0.1),64位版本 CUDA > 10.2 cuDNN > 7.6pip下载指令: python -m pip i…

面向本科生的智能品牌传播策略优化

面向本科生的智能品牌传播策略优化 一、引言 在数字化时代,品牌传播已不再是简单的信息传递,而是需要借助智能技术实现精准、高效、创新的传播策略。作为本科毕业生,选择“面向本科生的智能品牌传播策略优化实践”作为研究课题,不仅有助于深入理解品牌传播的理论知识,还…

【数据结构】一文了解七大排序算法

文章目录 前言一.直接插入排序插入排序思想插入排序代码实现插入排序总结 二.希尔排序希尔排序思想希尔排序代码实现希尔排序总结 三.选择排序选择排序思想选择排序代码实现选择排序总结 四.堆排序堆排序思想堆排序代码实现堆排序总结 五、冒泡排序冒泡排序思想冒泡排序代码实现…

Dify 与 Xinference 最佳组合 GPU 环境部署全流程

背景介绍 在前一篇文章 RAG 项目对比 之后,确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。 Dify 是将模型的加载独立出去的,因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference,理由如下&…

易我分区大师18.8.0更新:两大功能改进

近日,易我分区大师18.8.0更新上线。此次更新重点改进了系统克隆功能,支持从第二块系统盘(从盘)克隆系统;同时,软件支持将分区的文件系统格式从FAT转换成exFAT。 01、系统克隆 系统克隆功能旨在帮助用户在…

pinia学习

conuter.ts <template><div><!-- 显示当前的计数 --><p>Count: {{ count }}</<!-- 显示计算的双倍计数 --><p>Double Count: {{ doubleCount }}</p><!-- 点击按钮以增加计数 --><button click"increment">…

基于红黑树对map和set的封装

前言 前面我们已经对红黑树做了介绍和实现&#xff0c;本期我们来对红黑树进一步改造&#xff0c;然后基于改造后的红黑树封装出map和set&#xff01; 本期内容介绍 • 红黑树的改造 • 红黑树的迭代器实现 • map的封装 • set的封装 • 全部源码 ● 红黑树的改造 我们目前…

未来互联网的新篇章:深度解析Facebook的技术与战略

随着科技的飞速发展和社会的不断变迁&#xff0c;互联网作为全球信息交流的重要平台&#xff0c;正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅是人们沟通、分享和互动的重要场所&#xff0c;更是科技创新和数字化进程的推动者。本文…

音视频开发—FFmpeg 从MP4文件中抽取视频H264数据

文章目录 MP4文件存放H264数据方式MP4 文件结构概述H.264 数据在 MP4 中的存储1. ftyp 盒子2. moov 盒子3. mdat 盒子 H.264 数据在 stsd 盒子中的存储&#xff08;AVC1&#xff09;AVC1与Annex-B 格式&#xff08;裸 H.264 流&#xff09;的区别 从MP4文件中提取H264裸流步骤&…

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…

怎么压缩视频?推荐7款必备视频压缩软件免费版(强烈建议收藏)

如今&#xff0c;视频内容日益丰富&#xff0c;并占据了许多人的日常娱乐和工作生活。然而&#xff0c;随着高清和超高清视频的普及&#xff0c;视频文件的体积也越来越大&#xff0c;给存储和传输带来了挑战。因此&#xff0c;学会如何压缩视频文件成为了许多人的需求之一。本…

小米官网的数据是怎么优化的?

小米PC端官网首页的“全部商品分类”功能是用户浏览和选择商品的重要入口。为了优化这一功能的数据展示和用户体验&#xff0c;可以采取以下几个步骤&#xff1a; 数据加载优化&#xff1a; 懒加载&#xff08;Lazy Loading&#xff09;&#xff1a;当鼠标划过“全部商品分类”…

实现前端登录注册功能(有源码)

引言 用户登录和注册是任何现代Web应用程序的基本功能。在前端开发中&#xff0c;实现一个安全且用户友好的登录注册系统至关重要。本文将介绍如何使用HTML、CSS和JavaScript&#xff08;包括Vue.js&#xff09;来实现前端的登录和注册功能。 1. 项目结构 首先&#xff0c;我们…