硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1323|回复: 2
收起左侧

请教各位大佬 CmBacktrace源码分析

[复制链接]

3

主题

24

回帖

33

积分

新手上路

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106622
QQ
发表于 2022-10-11 16:19:17 | 显示全部楼层
帮顶。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 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不支持中断使用的接口,再线率随机,所以用这种方法来分析是比较有效率的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-27 05:08 , Processed in 0.177458 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表