Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
backtrace
risc-v_RISCV
RVBacktrace RISC-V极简栈回溯组件
发布于 2024-08-30 15:40:19 浏览:597
订阅该版
[tocm] # RVBacktrace ## 组件简介 一个极简的RISC-V栈回溯组件。 ## 组件源码 组件源码:https://github.com/Yaochenger/RvBacktrace ## 组件功能 1.在需要的地方调用组件提供的唯一API,开始当前环境的栈回溯 2.支持输出addr2line需要的命令,使用addr2line进行栈回溯 3.支持结合反汇编,栈回溯信息图表化 TODO List: 1. 支持打印指定线程的栈回溯信息 2. 支持对接RT_ASSERT 3. 支持输出更多的符号信息 4. 支持文件跳转 ## 添加组件 当前组件暂未做成软件包,所以这里介绍一下临时的使用方法: 首先下载源码,为了方便下文我以RT-Studio环境使用举例: 组件的根目录已经存在`Scons`脚本,所以可以直接放在`applications`目录下: ![screenshot_image-20240830144004987.png](https://oss-club.rt-thread.org/uploads/20240830/84c5bb48ca6291b6a116e0e922fd4dce.png) 修改applications目录下的Scons脚本,示例如下: ```python import rtconfig from building import * cwd = GetCurrentDir() src = Glob('*.c') CPPDEFINES=[] CPPPATH = [cwd] group = DefineGroup('Applications', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES=CPPDEFINES) list = os.listdir(cwd) for item in list: if os.path.isfile(os.path.join(cwd, item, 'SConscript')): group = group + SConscript(os.path.join(item, 'SConscript')) Return('group') ``` 完成上述工作,只要组件参与编译且编译没问题,组件添加成功。 ## 使用示例 当前组件C的内容极其简单,同时对用户仅提供单个API:void rvbacktrace(void),用户在需要的地方调用该API就可以将当前的调用栈信息输出,示例(下文演示为HPM6750): ### 1.在示例代码适当位置调用rvbacktrace ```c int main(void) { extern void rvbacktrace(void); rvbacktrace(); return 0; } ``` ### 2.运行代码,终端输出调用栈信息 ![screenshot_image-20240830145139827.png](https://oss-club.rt-thread.org/uploads/20240830/6db3a193841d6390a4f6298e82792cc2.png) ### 3.栈回溯信息直观化 可以看到的是当前shell输出的信息没有符号信息,不太直观,当前组件提供了两种方法:1.使用addr2line工具 2.结合返汇编文件中的信息输出调用栈符号。当然还有更好的想法,已经在路上了.接下来详细介绍这俩中方法的使用 #### 3.1 addr2line工具 可以看到shell输出的信息中包含addr2line需要的信息,我们将其拷贝,然后在当前rtthread.elf目录下使用该工具,我的环境中在wsl有该工具,则使用该工具打开,打开后将之前复制的信息拷贝至终端执行,输出如下: ![screenshot_image-20240830150158749.png](https://oss-club.rt-thread.org/uploads/20240830/9390f49baa4d252f1abd1880f97df927.png) 可以看到输出的信息已经很丰富了,在调试过程中还是很有帮助的。 #### 3.2 结合反汇编图形化 在RT-Studio配置输出反汇编命令 ```SHELL D:/RT-ThreadStudio/repo/Extract/ToolChain_Support_Packages/RISC-V/RISC-V-GCC-RV32/2022-04-12/bin/riscv32-unknown-elf-objdump -d rtthread.elf > rtthread.asm ``` ![screenshot_image-20240830150422955.png](https://oss-club.rt-thread.org/uploads/20240830/40c81002d5bf80312b237fc768af51db.png.webp) 在反汇编文件同级目录下创建一个txt文本将shell输出的信息拷贝至txt文本 ![screenshot_image-20240830150710510.png](https://oss-club.rt-thread.org/uploads/20240830/119dd1244967848eed108d325d1f1db1.png) rvbacktrace.txt中的内容如下: ![screenshot_image-20240830151500431.png](https://oss-club.rt-thread.org/uploads/20240830/4c45075dba6c1c22aa27875ed25cb83b.png) 然后点击工程目录下的RVBacktrace.py ![screenshot_image-20240830150854537.png](https://oss-club.rt-thread.org/uploads/20240830/5b8e28e992f5bef7d115169ff0359289.png) 运行界面: ![screenshot_image-20240830150917658.png](https://oss-club.rt-thread.org/uploads/20240830/855146675b724326ce3a901c9d20ae78.png) 这里我们输入rvbacktrace.txt与rtthread.asm的路径,为了方便将它俩放在了同一目录下, 复制它两的路径并输入到上述终端中: ```c D:\RT-ThreadStudio\workspace\HPM6750\flash_debug ``` 运行结果: ![screenshot_image-20240830151531571.png](https://oss-club.rt-thread.org/uploads/20240830/7decd609fe8111eabbe27c2ff33fcc4f.png) 同时会自动生成html文件,以表格的形似输出栈回溯信息,该文件在生成后自动打开。 ![screenshot_image-20240830152140580.png](https://oss-club.rt-thread.org/uploads/20240830/2638e68eb0f42508dfd0d054cd6df0cf.png.webp) 上述是第一次运行,如果后续有其他的栈回溯信息,我们只需要将shell输出的信息拷贝至之前创建的txt文本并保存,上述图表就会自动更新,即在完成第一次操作后,后续只需要将shell输出的新信息拷贝至txt文本即可。 如果需要修改txt文本的路径或者反汇编的路径,运行源码下的clean.py后清除中间文件,重新按上述步骤执行即可。 感觉不错的小伙伴点个小星星叭,一起向RT-Thread/RISC-V奔跑!
6
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
rv666
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
文章
20
回答
56
被采纳
9
关注TA
发私信
相关文章
1
cm_backtrace怎么定位Usage fault问题点呢
2
有没有RISC-V版本的backtrace?
3
第一次编译报错,找不到文件
4
崩溃了,没有打印线程信息,问题不知道怎么定位
5
rt-thread有没有什么工具可以分析程序异常后输出的打印信息
6
如何移植cortex-a的backtrace到V4.1.1上?
7
studio能否支持risc-v的工程,包括调试。
8
移植rt-nano至risc-v时,无法在main函数创建用户线程
9
risc-v移植rtthread,程序莫名跳转到异常Exception
10
GD32VF103出现to free a bad data block:错误
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部