RVBacktrace
组件简介
一个极简的RISC-V栈回溯组件。
组件功能
在需要的地方调用组件提供的唯一API,开始当前环境的栈回溯
支持输出addr2line需要的命令,使用addr2line进行栈回溯
支持结合反汇编,栈回溯信息图表化
TODO List:
支持打印指定线程的栈回溯信息
支持对接RT_ASSERT
支持输出更多的符号信息
支持文件跳转
添加组件
这个组件已经制作成为rtthread软件包,大家可以在软件包市场找到。可以在env/RT-ThreadStudio中添加次软件包进行使用。使用过程有任何疑问/反馈欢迎提ISSUE或者在群里讨论。
使用示例
当前组件C的内容极其简单,同时对用户仅提供单个API:void rvbacktrace(void),用户在需要的地方调用该API就可以将当前的调用栈信息输出,示例(下文演示为HPM6750):
1.在示例代码适当位置调用rvbacktrace
2.运行代码,终端输出调用栈信息
3.栈回溯信息直观化
可以看到的是当前shell输出的信息没有符号信息,不太直观,当前组件提供了两种方法:
使用addr2line工具
结合返汇编文件中的信息输出调用栈符号。当然还有更好的想法,已经在路上了.接下来详细介绍这俩中方法的使用
3.1 addr2line工具
可以看到shell输出的信息中包含addr2line需要的信息,我们将其拷贝,然后在当前rtthread.elf目录下使用该工具,我的环境中在wsl有该工具,则使用该工具打开,打开后将之前复制的信息拷贝至终端执行,输出如下:
可以看到输出的信息已经很丰富了,在调试过程中还是很有帮助的。
3.2 结合反汇编图形化
在RT-Studio配置输出反汇编命令
在反汇编文件同级目录下创建一个txt文本将shell输出的信息拷贝至txt文本
rvbacktrace.txt中的内容如下:
然后点击工程目录下的RVBacktrace.py
运行界面:
这里我们输入rvbacktrace.txt与rtthread.asm的路径,为了方便将它俩放在了同一目录下,
复制它两的路径并输入到上述终端中:
运行结果:
同时会自动生成html文件,以表格的形似输出栈回溯信息,该文件在生成后自动打开。
上述是第一次运行,如果后续有其他的栈回溯信息,我们只需要将shell输出的信息拷贝至之前创建的txt文本并保存,上述图表就会自动更新,即在完成第一次操作后,后续只需要将shell输出的新信息拷贝至txt文本即可。
如果需要修改txt文本的路径或者反汇编的路径,运行源码下的clean.py后清除中间文件,重新按上述步骤执行即可。
感觉不错的小伙伴点个小星星叭,一起向RT-Thread/RISC-V奔跑!
全部0条评论
快来发表一下你的评论吧 !