【嵌入式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.mfbz.cn/a/793787.html

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

相关文章

异业联盟整合各大行业门店,共享资源

异业联盟系统是一种将不同行业的企业或商家整合在一起,通过资源共享、优势互补、合作推广等方式,实现共同发展和互利共赢的商业合作模式的数字化管理和运营系统。 其具有以下显著优势: 1.拓展客户群体:不同行业的企业联合起来&am…

Python骨架肌体运动学数学模型

🎯要点 🎯运动学矢量计算 | 🎯跳远的运动学计算 | 🎯关节肢体运动最小加加速度模型 | 🎯膝关节和踝关节角度二维运动学计算 | 🎯上下肢体关节连接运动链数学模型 | 🎯刚体连接点速度加速度计算…

PPTP、L2TP、IPSec、IPS 有什么区别?

随着互联网的发展,保护网络通信的安全越来越重要。PPTP、L2TP、IPSec、IPS是常见的网络安全协议和技术,在保护网络通信安全方面发挥着不同的作用和特点。下面介绍PPTP、L2TP、IPSec、IPS之间的区别。 点对点隧道协议(PPTP)是一种用…

Android列表控件的属性与用法

列表控件的属性与用法 列表控件有Spinner、ListView、RecyclerView、ViewPager等。列表控件的显示一般涉及3个部分:控件、适配器、数据,这三者之间的关系如图1所示。适配器是数据与列表之间的桥梁,适配器中需要将数据中需要显示的属性与列表…

Qt | 绘制直线与 QLineF 类

点击上方"蓝字"关注我们 01、绘制直线 02、Qline和QLineF 【1】QLine 是整型版本,成员函数较少,QLineF 是精度更高的浮点型版本,本文以 QLineF 类 进行讲解。 QLineF 类提供了一个二维向量,使用 QLineF 类绘制直线可以利用该类中的成员函数方便 的对线条的属…

调试的时候如何查看当前程序的变量信息

目录 调试前/后的调试窗口 ​编辑 调试窗口 --- 监视 调试窗口 --- 内存 调试窗口 --- 调用堆栈 调试前/后的调试窗口 调试前的调试窗口: 调试前的调试窗口是没有显示的,只有在调试的时候才会有相对应的调试窗口 调试后的调试窗口&#xff1a…

如何找工作 校招 | 社招 | 秋招 | 春招 | 提前批

马上又秋招了,作者想起以前读书的时候,秋招踩了很多坑,但是第一份工作其实挺重要的。这里写一篇文章,分享一些校招社招的心得。 现在大学的情况是,管就业的人,大都是没有就业的辅导员(笔者见过…

开启新纪元!被AI驱动的游戏世界,提升游戏体验

随着人工智能的高速发展,人工智能逐渐应用到了生活中的方方面面,人工智能在游戏中也有诸多应用,在游戏里领域扮演了相当重要的角色。游戏AI是伴随着电子游戏而出现的,在早期的游戏中就出现了对抗类AI角色,后来逐渐出现…

SpringBoot新手快速入门系列教程十一:基于Docker Compose部署一个最简单分部署服务项目

如果您还对于Docker或者Docker Compose不甚了解,可以劳烦移步到我之前的教程: SpringBoot新手快速入门系列教程九:基于docker容器,部署一个简单的项目 SpringBoot新手快速入门系列教程十:基于Docker Compose&#xf…

职业教育人工智能实验实训室建设应用案例

随着人工智能技术的快速发展,其在职业教育领域的应用逐渐深入。唯众作为一家专注于教育技术领域的企业,积极响应国家关于人工智能教育的政策号召,通过建设人工智能实验实训室,为学生提供了一个实践操作与创新思维相结合的学习平台…

Axure-黑马

Axure-黑马 编辑时间2024/7/12 来源:B站黑马程序员 需求其他根据:visio,墨刀 Axure介绍 Axure RP是美国Axure Software Solution给公司出品的一款快速原型大的软件,一般来说使用者会称他为Axure 应用场景 拉投资使用 给项目团…

加密软件|让数据传输更安全

加密软件在当今数字化时代扮演着至关重要的角色,它们通过先进的加密算法和技术,确保数据在存储、传输和分享过程中的安全性,从而保护个人隐私和企业机密。一、加密软件的基本作用数据加密:加密软件通过应用复杂的加密算法&#xf…

Linux环境下Oracle 11g的离线安装与配置历程

在成功体验了 Windows 版本的Oracle 11g 后,这几天心血来潮,决定再挑战一下Linux 环境下的安装,特别是在考虑到部门内部虚拟机无法联网的情况下,我选择了在CentOS 7上进行离线安装。这次安装之旅,主要参考了下面大佬的…

记录些Redis题集(1)

为什么Redis要有淘汰机制? 淘汰机制的存在是必要的,因为Redis是一种基于内存的数据库,所有数据都存储在内存中。然而,内存资源是有限的。在Redis的配置文件redis.conf中,有一个关键的配置项: # maxmemory…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第一篇 嵌入式Linux入门篇-第二十六章 安装超级终端软件

i.MX8MM处理器采用了先进的14LPCFinFET工艺,提供更快的速度和更高的电源效率;四核Cortex-A53,单核Cortex-M4,多达五个内核 ,主频高达1.8GHz,2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

Python | Leetcode Python题解之第229题多数元素II

题目: 题解: class Solution:def majorityElement(self, nums: List[int]) -> List[int]:cnt {}ans []for v in nums:if v in cnt:cnt[v] 1else:cnt[v] 1for item in cnt.keys():if cnt[item] > len(nums)//3:ans.append(item)return ans

Oracle 23ai 中的重要新特性 VECTOR 数据类型

Oracle 23ai 中的 VECTOR 数据类型是 Oracle 数据库在 AI 领域的一个重要新特性,它允许用户以向量的形式存储数据,并在这些向量的基础上进行高效的搜索和分析。以下是对 Oracle 23ai VECTOR 数据类型的详细解析: 参考官方文档地址 https://d…

集成sa-token前后端分离部署配置corsFliter解决跨域失效的真正原因

文章目录 1.前言2.问题复现3.解决方法3.1 方式一:后端修改CorsFilter源码3.2 方式二:前端禁用或移除浏览器referrer-policy引用者策略 4.总结 1.前言 缘由请参看下面这篇文章:sa-token前后端分离解决跨域的正确姿势 https://mp.weixin.qq.co…

【算法】二叉树-迭代法实现前后中序遍历

递归的实现就是:每一次递归调用都会把函数的局部变量,参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,这就是递归为什么可以返回上一层位置的原因 可以用栈实现二叉树的前中后序遍历 1. 前序…

base SAS programming学习笔记(functions)

1.SAS function 分类&#xff1a; 计算描述统计量的函数&#xff1a; 举例如下&#xff1a;avgscoremean(exam1,exam2,exam3) 2.function 基本格式 function-name(argument1,argument2,......<argumentn>&#xff09; argument可以如下&#xff1a;变量名&#xff1b;常…