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

news/2024/9/28 6:20:10/

一、栈回溯

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

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

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

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

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.ppmy.cn/news/1531462.html

相关文章

828华为云征文|部署漫画杂志媒体服务器 Komga

828华为云征文|部署漫画杂志媒体服务器 Komga 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 Komga3.1 Komga 介绍3.2 Komga 部署3.3 Komga 使用 四、总结 一、…

获取交易软件【热度排行数据】2024年9月26日,一股淡淡的牛味

2024年9月26日,一股淡淡的牛味 概念热度的排行榜和行业热度排行榜。 像是这种类型的数据,能不能加到我们的量化模型里面,作为选股和下单指令的判断条件之一呢? 下面图片,有很多数据接口,可以1对1帮助您解…

【解密 Kotlin 扩展函数】扩展函数的导入和使用(十七)

导读大纲 1.1.1 将 joinToString 函数作为 String 类型的扩展函数1.1.2 导入和使用扩展函数 1.1.1 将 joinToString 函数作为 String 类型的扩展函数 在之前的教程中, 我们已经基本实现 joinToString 函数 自定义joinToString 函数–传送门<1> 将原本第一个参数collecti…

【资源一号04A卫星(中巴地球资源卫星04A星)】

资源一号04A卫星&#xff08;中巴地球资源卫星04A星&#xff09; 资源一号04A卫星&#xff0c;全称为中巴地球资源卫星04A星&#xff08;CBERS-04A&#xff09;&#xff0c;是中国与巴西两国合作研制的第六颗地球资源卫星。以下是对该卫星的详细介绍&#xff1a; 一、基本信…

从0-1搭建海外社媒矩阵,详细方案深度拆解

做买卖&#xff0c;好的产品质量固然是关键&#xff0c;但如何让更多的消费者知道&#xff1f;营销推广是必不可少的。在互联网时代&#xff0c;通过社交媒体推广已经成为跨境电商卖家常用的广告手段。 如何通过海外社交媒体矩阵扩大品牌影响力&#xff0c;实现营销目标&#…

Kafka技术详解[1]:简介与基础概念

目录 1. Kafka入门 1.1 概述 1.1.1 初识Kafka 1.1.2 消息队列 1.1.3 生产者-消费者模式 1.1.4 消息中间件对比 1.1.5 ZooKeeper 1. Kafka入门 1.1 概述 1.1.1 初识Kafka Kafka是由Scala和Java语言开发的高吞吐量分布式消息发布和订阅系统&#xff0c;也是大数据技术领…

基于nodejs+vue的外卖管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

UI设计师面试整理-工具和技术技能

在UI设计师面试中,展示你对工具和技术的掌握程度非常重要。这不仅能体现你的专业能力,还能让面试官了解你是否具备他们团队所需的技能。以下是一些常用的UI设计工具和相关技术技能,以及如何在面试中有效展示它们。 1. UI设计工具 a. Sketch ● 用途