DAPAIBULO 发表于 2022-10-11 11:30:38

请教各位大佬 CmBacktrace源码分析

请教各位大佬,CmBacktrace是如何解析出函数调用栈的?我看了下,似懂非懂。请问有没有详细的源码分析相关文章,或相关实例分析?一般的实例分析介绍太简单了,就是用除0错误演示。我在用RTTHREAD的时候遇到Hardfault,不知道怎么从栈中追溯,了解一点原理,但理解不深。用CmBacktrace能追踪到在哪个线程中的哪个函数出现问题的,自己不知道怎么去手动分析,简单的还能分析下,复杂的不知道怎么分析了。

eric2013 发表于 2022-10-11 16:19:17

帮顶。

vi_test_zh 发表于 2023-1-2 16:24:38

1. 当前在task上下文还是中断上下文运行,os肯定知道;
2. 当前在哪个task运行,os也知道,你需要记录下来;
3. 中断和各个task都分配了对应的堆栈,函数调用的信息就存放在里面
4. 当程序进入异常时候,将对应task栈或者中断栈的值输出,并匹配到当前代码段的范围,通过addr2line就能够反推出函数调用栈;
5. 根据函数调用栈顺序,对现场进行还原、分析
6. 不是100%能还原,但70%肯定有的
7. 这个方法适用于大部分rtos、通用芯片平台(s32k、stm32、mpc5xxx都写过对应代码,思路估计和CmBacktrace类似)
8. 使用这种情况,我遇到的最终还原问题原因,都是在中断中调用了rtos不支持中断使用的接口,再线率随机,所以用这种方法来分析是比较有效率的。
页: [1]
查看完整版本: 请教各位大佬 CmBacktrace源码分析