分析工具 SmartTrace

更正文档      贡献说明

使用目的

  • 接收日志和交互shell,取代串口工具
  • 自动解析栈回溯backtrace,替代手动addr2line
  • GDB常用调试功能,替代硬件仿真器
    • 查看函数反汇编
    • 查看地址反汇编
    • 查看变量值等

依赖组件

  • debug
  • cli

操作步骤

  1. 打开SmartTrace(windows版本和mac版本分开,这里以windows版本为例)

设置

  1. 点击左上角 “设置”,加入elf 文件路径(当前只需加入kernel elf文件即可)和过滤规则文件

其中,日志过滤文件和uTrace.exe在同一个路径下

日志

点击“日志”标签,设置串口号,波特率,打开串口

可以看到设备日志,跟串口工具一样

终端

点击左上角“终端”,有个简易的shell,操作方式跟串口工具一样,**这里是把AliOS Things cli 命令的输出,从日志里拿出来,输出到了这个“终端”标签下,**方便进行一些命令的调试。

查看栈回溯backtrace

直接解析日志中的backtrace

如果使用SmartTrace工具接上了串口,则在系统异常crash的时候会直接解析调用栈(右侧的解析窗口默认情况下是隐藏的,将光标移到右侧,光标图案变成左右箭头的时候,点击并往左拖动,可以拖出来“过滤日志窗口”。注意,在右边还有一个“Sequence Diagram”窗口,可查看时序图,这里暂时可以不管)

从其他地方复制backtrace并解析

如果日志来源于其他地方,如调试串口工具secureCRT,如果此时想查看栈回溯,复制完整的栈回溯信息 (“Kernel Call stack”栈信息是必要的)

使用“本地日志” — “clipboard” — “**分析日志**”, 也可以解析调用栈

GDB调试功能

查看反汇编 $disass 命令

<tt>$disass function</tt>:查看指定函数的反汇编

如:查看cli_main接口的反汇编 $disass cli_main 工具会输出cli_main 函数的反汇编

<tt>$disass memory_address</tt>:查看指定地址的反汇编

如:查看crash时PC的反汇编,从日志看得知PC=0x10057D40 $disass 0x10057D40 工具会输出

查看变量

查看 g_ready_queue结构体数据 $p g_ready_queue 会输出:

当前支持的GDB命令汇总

  • $p variable:打印变量variable的值
  • $p *(pointer_type *)memory_address:按指定的数据类型读取内存数据并打印
  • $p &variable:打印变量variable的地址
  • $x /nwx memory_address:查看指定地址的内存数据,其中n表示数字,用1~9代替
  • $set variable=value:设置某个变量的值为value
  • $set *(pointer_type *)memory_address=value:设置某个内存地址的值为value -$disass function:查看指定函数的反汇编代码 -$disass memory_address`:查看指定地址的反汇编代码

注:更多高级功能在持续演进。 ​

附件

当前仅支持 windows 和 mac 环境,均在zip包里,无需安装,选择相应版本下载即可使用