1 获取 pc 或者psr寄存器的值

在这里插入图片描述

2 在编译生成的map文件中找到pc 值对应的函数

在这里插入图片描述

3 通用方法

打断点 获取sp寄存器值
在memroy browser找到压入栈中的函数位置
关键是理解sp寄存器 函数入栈出栈
一般的bug都是数组越界 堆栈溢出导致的
如果R14(LR) = 0xFFFFFF9, 查看MSP(主堆栈指针)的值
如果R14(LR) = 0xFFFFFFD, 查看PSP(进程栈指针)的值
MSP 值在memory中找到0x08开头的32位数,注意大小端
然后一定是在 Assembly界面中找代码,否则在map文件中有可能找不到具体函数。

4 不要在inline函数处添加断点

在内联函数中设置断点可能意味着设置数百或数千个“虚拟”断点。跟踪哪些代码被内联在哪里对于IDE来说太过于繁琐,因此它不会这样做。
inline 添加断点会经常引起Hardfault!

5.使用CmBacktrace,推荐

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐