嵌入式的核心能力-Debug调试能力(一)

news2024/12/23 3:32:41

一、栈回溯

引入:调试程序时,经常会发生这类错误:

读写某个地址,程序报错;调用某个空函数,导致程序报错等等。

解决方法是,可以利用异常处理函数去打印出“发生错误瞬间”的所有寄存器地址

根据这些打印出来的地址信息,回溯发生错误的位置,并且需要知道位于调用链路。

1.栈回溯的原理

本质还是看汇编,C语言函数的返回地址,保存在栈里、

2.修改异常处理函数打印栈内容

位于硬件错误异常中 HardFault_Handler 都是死循环,并不能提供更多的信息,例如RT thread做的就很好,会有对应的寄存器信息 以及相关反馈。

整个流程大致为:发生错误

中断运行->硬件 原本LR先入栈 LR等于异常返回地址 保存程序状态(软件也要保存硬件保存剩余寄存器) 返回地址PC值->执行异常向量函数 打印栈

STMFD   r0!, {r4 - r11}         ; push r4 - r11 register
STMFD   r0!, {lr}               ; push exec_return register

来自RTthread的函数

3.分析stack,找出函数调用关系

得到反汇编,例如fromelf --text -a -c --output=all.dis test\test.axf

通过分析反汇编以及地址

二、修改bin文件实现断点

引入:什么情况下需要打断点,在没有调试器,不方便使用调试器,想查看代码任意位置的状态

如何触发?修改原来的代码 改为未定义指令 并且修改异常处理函数打印寄存器和栈内容

需要得到.dis以及.bin 比如MDK是利用

fromelf  --text  -a -c  --output=all.dis    test\test.axf
fromelf  --bin  --output=test.bin test\test.axf

本质是通过软断点的方式实现(把正确的指令改错),软断点的关键是利用特定的指令替换被调试程序中的某些指令,迫使程序在执行到该位置时产生异常。

硬断点就例如MDK中打的断点了有限制次数,处理器硬件支持的调试机制,例如位于flash中打断点,ARM架构的功能watchpower,并且有次数限制。

重新烧写

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

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

相关文章

网络编程(1)——同步读写api

一、day1 学习了服务器和客户端socket的建立、监听以及连接。 (1)socket的监听和连接 服务端 1)socket——创建socket对象。 2)bind——绑定本机ipport。 3)listen——监听来电,若在监听到来电&#x…

人脸遮挡检测系统源码分享

人脸遮挡检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

基于微信小程序的特色乡村综合展示平台设计与实现(源码+文档+讲解开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

C++入门基础知识89(实例)——实例14【创建各类三角形图案】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于创建各类三角形图案的相关内容&#xff…

怎样用云手机进行TikTok矩阵运营?

在运营TikTok矩阵时,许多用户常常面临操作复杂、设备过多等问题。如果你也感到操作繁琐,不妨考虑使用云手机。云手机具备丰富的功能,能够帮助电商卖家快速打造高效的TikTok矩阵。接下来,我们将详细解析这些功能如何提升你的运营效…

每日论文6—16ISCAS一种新型低电流失配和变化电流转向电荷泵

《A Novel Current Steering Charge Pump with Low Current Mismatch and Variation》16ISCAS 本文首先介绍了传统的current steering charge pump,如下图: 比起最简单的电荷泵,主要好处是UP和DN开关离输出节点较远,因此一定程度…

vue.js 原生js app端实现图片旋转、放大、缩小、拖拽

效果图&#xff1a; 旋转 放大&#xff1a;手机上可以双指放大缩小 拖拽 代码实现&#xff1a; html <div id"home" class"" v-cloak><!-- 上面三个按钮 图片自己解决 --><div class"headImage" v-if"showBtn">&l…

python控制台是什么意思

Python 控制台是一种执行命令的快速方法&#xff0c;可以访问完整的Python API、查询命令历史记录和自动补全。命令提示符是 Python 3.x 的典型操作&#xff0c;加载解释器&#xff0c;并在提示符 >>> 处接受命令。 Python 控制台是内置的用于探索Blender 的可能性的…

滑动窗口算法专题(2)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; 优选算法专题 想要了解滑动窗口算法的介绍&#xff0c;可以去看下面的博客&#xff1a;滑动窗口算法的介绍 目录 904. 水果成篮 438. 找到…

JMeter向kafka发送数据

项目测试服务消费Kafka能力&#xff0c;需要消费特定格式的数据&#xff0c;因此要向Kafka中灌入数据&#xff0c;给老铁们分享下jmeter向kafka发送数据方法&#xff1a; 1. 首先在jmeter如下目录中导入一个kafka相关的jar包&#xff0c;如图&#xff1a; 2. 导入之后就可以打…

Spring Task快速入门

Spring Task介绍 Spring Task 是 Spring 框架提供的一种轻量级的定时任务解决方案&#xff0c;可以按照约定时间自动执行某个代码逻辑。它主要用于在 Spring 应用程序中执行定时任务&#xff0c;提供了一种声明式的方式来配置和执行这些任务。Spring Task 支持通过注解和配置文…

易燃气体检测系统源码分享

易燃气体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【抓包工具】如何下载抓包工具Fiddler

目录 Fiddler简介 Fiddler下载步骤 Fiddler安装步骤 配置Fiddler抓取HTTPS Fiddler简介 Fiddler是一个http协议调试代理工具&#xff0c;它能够记录并检查所有你的电脑和互联网之间的http通讯&#xff0c;设置断点&#xff0c;查看所有的“进出”Fiddler的数据&#xff08…

数据先行 -- Scale AI如何通过AI数据服务成为独角兽

数据引领未来 ©作者|格林&玄同 来源|神州问学 引言 近期&#xff0c;OpenAI发布的o1模型得到了广泛关注&#xff0c;该模型在多个推理能力上超过了人类博士水平。AI是否真的具有思考能力&#xff1f;为了追寻这一答案&#xff0c;技术专家们发出倡议&#xff0c;向人…

【Python】入门学习2:输入函数、输出函数、转义符

一、输入函数 # 普通用法&#xff1a;小括号里写提示语句&#xff0c;用引号包裹input("请输入&#xff1a;") # 控制台会显示“请输入&#xff1a;”&#xff0c;可以在后面输入内容# 变量接收&#xff1a;可以用变量进行接收a input("请输入&#xff1a;&q…

PSO粒子群代码手搓实现—代码详解版python

PSO粒子群算法手搓实现版&#x1f680; 读了博士之后&#xff0c;送算法方向转到了控制方向&#xff0c;然后最近接触到的项目&#xff0c;要用到粒子群算法&#xff0c;然后秉持着我自己一贯的把基础代码自己手写一遍的原则&#xff0c;我自己上网找了一些视频&#xff0c;然后…

通过反思性反馈增强和提升大模型

人工智能咨询培训老师叶梓 转载标明出处 尽管通过人类反馈的强化学习&#xff08;RLHF&#xff09;在使LLMs与人类偏好对齐方面展现出潜力&#xff0c;但这种方法往往只会导致表面的对齐&#xff0c;优先考虑风格上的变化而非提升LLMs在下游任务中的表现。而且偏好的不明确可能…

【漏洞复现】公交IC卡收单管理系统 SQL注入致RCE漏洞复现

》》》产品描述《《《 公交IC卡收单 管理系统Q是城市公共交通领域中不可或缺的一部分&#xff0c;它通过集成先进的集成电路技术(IC卡)实现了乘客便捷的支付方式&#xff0c;并有效提高了公共交通运营效率。系统集成了发卡、充值、消费、数据采集、查询和注销等多个功能模块&am…

走进上海郭培高定会馆:以冠珠华脉、华珍筑就至臻至性的艺术空间

“我热爱高级时装&#xff0c;因为她是一种生命的停驻。我希望我的高级时装成为馆藏级的精品&#xff0c;殿堂级的珍宝&#xff0c;成为传世杰作。” ——郭培 中国唯一一位法国高定公会受邀会员&#xff0c;曾荣登《TIME》时代周刊全球100位最具影响力人物榜单。纽约时报评价…

Error:Decorators are not valid here. 使用Angular中的装饰器

Decorators are not valid here&#xff0c;项目中出现这个提示信息&#xff0c;说明装饰器未知错误、或者在不支持的元素上使用了装饰器。 如下图所示&#xff0c;我在NgModule装饰器后面加了一个导出方法&#xff0c;加完之后控制台提示了如下错误&#xff1a;Error TS1206&a…