backtrace工具使用

使用场景:
  • 程序发生exception
  • 使用GDB调试代码

程序异常时,通过addr2line定位异常代码位置

  • 当程序异常时,会输出错误现场的函数调用栈和其他所有task的函数调用栈,我们可以通过这些信息分析程序异常原因,并且可以配合addr2line工具精确定位问题代码位置,addr2line是我们sdk中自带的工具链工具,可以根据exception输出的backtrace地址具体定位到我们的代码的哪一行,命令格式为
riscv64-unknown-elf-addr2line -e customer_app/bl602_demo_event/build_out/****.elf -a -f 程序地址(可加多个地址空格分开)
  • 示例如下

gdb 下bts命令查看所有线程的堆栈信息

  • 从命令行启动OpenOCD调试代理,其默认在3333端口等待GDB连接

./tools/ide/openocd/linux64/bin/openocd -f tools/debug/if_bflb_link.cfg -f tools/debug/tgt_602_xip_attach.cfg

  • 启动GDB

riscv64-unknown-elf-gdb -x tools/debug/602.init -se customer_app/bl602_demo_event/build_out/bl602_demo_event.elf

  • 连接OpenOCD

在GDB命令行中输入 target remote:3333

  • 输入命令 bts 查看所有线程堆栈信息, bts 是我们的自定义命令,当然gdb的其他调试命令都是可以正常使用的,如设置断点b,单步调试n,查看backtrace命令bt等