嵌入式-常用的调试技巧
本文总结了嵌入式开发中常用的调试技巧,主要分为五部分:1)条件断点(适合捕捉偶发问题但可能影响实时性);2)调用栈回溯(快速定位问题路径,但对栈破坏情况无效);3)Trace功能(Trace32特有的变量变化追溯);4)Map文件分析(解决内存相关问题);5)示波器等硬件工具使用。文章还指出当前对Trace功能和Map文件的使用经验尚不完整,后续需要继续学习完善。这些调试方法适用于裸机、RTOS和
系列文章目录
todo :待完成文章总结
第一章:语言篇:简单剖析C语言在日常工作中的应用
第二章:裸机篇:关于裸机相关的部分知识(这里主要是针对作者想要了解的部分)
2-1:裸机的启动部分
2-2:Arm架构相关的知识
第三章:通信篇:车载常用的通信网络基础知识
https://blog.csdn.net/qq_50093870/article/details/153388253?spm=1011.2124.3001.6209
3-1 SPI dasiy chin连接方式与代码实现
第四章:操作系统篇:这里主要是作者在工作中常用到的关于RTOS基础的知识,主要是结合相关Autosar开发的架构
第五章:调试篇:这里是在日常工作中用到的调试的知识,主要分为裸机部分的调试和带Os的调试
第六章:Autosar篇:由于不同厂商使用的Autosar的工具链与方法论各不相同,所以作者尽量抽象与简化
嵌入式-常用的调试技巧
一、OS和裸机常用的调试技巧
条件断点
定义:条件断点(Conditional Breakpoint)只有在指定条件满足时才会触发,用于避免在高频执行代码中频繁停机。
如何使用:针对不同的调试设备,有不同的使用方法,这里不再赘述。
优缺点:优点,针对偶发的调试情况,可以捕捉到MCU运行的现场。
缺点,1)非常耗时,由于是通过软件进行判断的而非硬件,可能破坏实时性。
2)可能改变程序行为??
3)在 OS / 多核 / 中断环境下不可靠,这是由于全局变量,可能被其他Task给串改。
应用范围:
调用栈回溯
定义:调用栈,观察某个函数的调用关系。这是由于xxx;
优点:定位问题路径极快。其中对于Hardfault特别适用,但是当栈被破坏掉的话,就无法进行判别了。
- 裸机:HardFault / 异常现场
- RTOS:当前 task 的调用路径
- Linux:bt 是调试核心能力
栈破坏的常见原因:
- 栈溢出
- 野指针写栈
- memcpy / memset 越界
Trance
Tranc 功能是Trace32特有的,可以追溯变量的变化情况,比如某个变量在什么时候进行了跳变,并且记录下来。
但是目前这些功能都还没学习完整。
Map文件的使用
Map 文件用来回答三个问题:
代码/变量在“哪”、占“多大”、是谁占的。
这里对于栈溢出,内存不足等问题可以结合该文件进行调试。
这里目前也没有经常使用。
示波器和各种软件的使用
更多推荐
所有评论(0)