Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
backtrace
risc-v_RISCV
RVBacktrace RISC-V极简栈回溯组件
发布于 2024-08-30 15:40:19 浏览:1031
订阅该版
[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`目录下:  修改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.运行代码,终端输出调用栈信息  ### 3.栈回溯信息直观化 可以看到的是当前shell输出的信息没有符号信息,不太直观,当前组件提供了两种方法:1.使用addr2line工具 2.结合返汇编文件中的信息输出调用栈符号。当然还有更好的想法,已经在路上了.接下来详细介绍这俩中方法的使用 #### 3.1 addr2line工具 可以看到shell输出的信息中包含addr2line需要的信息,我们将其拷贝,然后在当前rtthread.elf目录下使用该工具,我的环境中在wsl有该工具,则使用该工具打开,打开后将之前复制的信息拷贝至终端执行,输出如下:  可以看到输出的信息已经很丰富了,在调试过程中还是很有帮助的。 #### 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 ```  在反汇编文件同级目录下创建一个txt文本将shell输出的信息拷贝至txt文本  rvbacktrace.txt中的内容如下:  然后点击工程目录下的RVBacktrace.py  运行界面:  这里我们输入rvbacktrace.txt与rtthread.asm的路径,为了方便将它俩放在了同一目录下, 复制它两的路径并输入到上述终端中: ```c D:\RT-ThreadStudio\workspace\HPM6750\flash_debug ``` 运行结果:  同时会自动生成html文件,以表格的形似输出栈回溯信息,该文件在生成后自动打开。  上述是第一次运行,如果后续有其他的栈回溯信息,我们只需要将shell输出的信息拷贝至之前创建的txt文本并保存,上述图表就会自动更新,即在完成第一次操作后,后续只需要将shell输出的新信息拷贝至txt文本即可。 如果需要修改txt文本的路径或者反汇编的路径,运行源码下的clean.py后清除中间文件,重新按上述步骤执行即可。 感觉不错的小伙伴点个小星星叭,一起向RT-Thread/RISC-V奔跑!
6
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
rv666
用GDB调试人生
文章
21
回答
64
被采纳
9
关注TA
发私信
相关文章
1
cm_backtrace怎么定位Usage fault问题点呢
2
有没有RISC-V版本的backtrace?
3
第一次编译报错,找不到文件
4
崩溃了,没有打印线程信息,问题不知道怎么定位
5
rt-thread有没有什么工具可以分析程序异常后输出的打印信息
6
如何移植cortex-a的backtrace到V4.1.1上?
7
使用RT-Thread Studio在程序进Hardfault时怎么方便的查看调用栈
8
rt_hw_backtrace_frame_unwind is not implemented
9
如何使用RTTHREAD Studio的debuge根据lr和pc的值在调试器里定位具体代码位置
10
studio能否支持risc-v的工程,包括调试。
推荐文章
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
cubemx
ESP8266
WIZnet_W5500
UART
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
ADC
定时器
flashDB
编译报错
socket
keil_MDK
中断
rt_mq_消息队列_msg_queue
Debug
SFUD
msh
ulog
C++_cpp
at_device
本月问答贡献
聚散无由
8
个答案
6
次被采纳
RTT_逍遥
7
个答案
2
次被采纳
加缪
2
个答案
2
次被采纳
踩姑娘的小蘑菇
6
个答案
1
次被采纳
a1012112796
4
个答案
1
次被采纳
本月文章贡献
wake_mirco
2
篇文章
7
次点赞
mushroom
1
篇文章
8
次点赞
张世争
1
篇文章
7
次点赞
rv666
1
篇文章
4
次点赞
Jack_____
1
篇文章
4
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部