RVBacktrace RISC-V极简栈回溯组件

描述

RVBacktrace

组件简介

一个极简的RISC-V栈回溯组件。

组件功能

在需要的地方调用组件提供的唯一API,开始当前环境的栈回溯

支持输出addr2line需要的命令,使用addr2line进行栈回溯

支持结合反汇编,栈回溯信息图表化

TODO List:

支持打印指定线程的栈回溯信息

支持对接RT_ASSERT

支持输出更多的符号信息

支持文件跳转

添加组件

这个组件已经制作成为rtthread软件包,大家可以在软件包市场找到。可以在env/RT-ThreadStudio中添加次软件包进行使用。使用过程有任何疑问/反馈欢迎提ISSUE或者在群里讨论。

使用示例

当前组件C的内容极其简单,同时对用户仅提供单个API:void rvbacktrace(void),用户在需要的地方调用该API就可以将当前的调用栈信息输出,示例(下文演示为HPM6750):

 

 

1.在示例代码适当位置调用rvbacktrace

RISC-V

 

 

2.运行代码,终端输出调用栈信息

RISC-V

 

 

3.栈回溯信息直观化

可以看到的是当前shell输出的信息没有符号信息,不太直观,当前组件提供了两种方法:

使用addr2line工具

结合返汇编文件中的信息输出调用栈符号。当然还有更好的想法,已经在路上了.接下来详细介绍这俩中方法的使用

3.1 addr2line工具

可以看到shell输出的信息中包含addr2line需要的信息,我们将其拷贝,然后在当前rtthread.elf目录下使用该工具,我的环境中在wsl有该工具,则使用该工具打开,打开后将之前复制的信息拷贝至终端执行,输出如下:

RISC-V

可以看到输出的信息已经很丰富了,在调试过程中还是很有帮助的。

3.2 结合反汇编图形化

在RT-Studio配置输出反汇编命令

RISC-VRISC-V

在反汇编文件同级目录下创建一个txt文本将shell输出的信息拷贝至txt文本

RISC-V

rvbacktrace.txt中的内容如下:

RISC-V

然后点击工程目录下的RVBacktrace.py

RISC-V

运行界面:

RISC-V

这里我们输入rvbacktrace.txt与rtthread.asm的路径,为了方便将它俩放在了同一目录下,

复制它两的路径并输入到上述终端中:

RISC-V

运行结果:

RISC-V

同时会自动生成html文件,以表格的形似输出栈回溯信息,该文件在生成后自动打开。

RISC-V

上述是第一次运行,如果后续有其他的栈回溯信息,我们只需要将shell输出的信息拷贝至之前创建的txt文本并保存,上述图表就会自动更新,即在完成第一次操作后,后续只需要将shell输出的新信息拷贝至txt文本即可。

如果需要修改txt文本的路径或者反汇编的路径,运行源码下的clean.py后清除中间文件,重新按上述步骤执行即可。

感觉不错的小伙伴点个小星星叭,一起向RT-Thread/RISC-V奔跑!

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分