分析工具

更正文档 贡献说明

使用目的

  • 接收日志和交互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 命令

$disass function:查看指定函数的反汇编

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

$disass memory_address:查看指定地址的反汇编

如:查看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包里,无需安装,选择相应版本下载即可使用。

点击下载