west debug
可以开启命令行调试,它底层调用arm-none-eabi-gdb.exe,配合jlink gdbserver完成调试任务。
本文介绍一些常用的调试方法。
开启调试:
$ west debug
退出调试:
(gdb) quit[q]
开始运行:
(gdb) continue[c]
停止运行:
Ctrl-C
重新运行:
(gdb) monitor reset
查看当前行:
(gdb) where
新建断点:
(gdb) break[b] main.c:main // <file>:<function>
(gdb) break[b] main.c:100 // <file>:<line-number>
(gdb) break[b] main // 当前文件中可以忽略文件名
(gdb) break[b] -10 // <line-offset>
查看断点:
(gdb) info[i] breakpoints[b]
删除断点:
(gdb) delete[d] 1 // 1是断点序号
(gdb) delete[d] breakpoints // delete all
设置一次性断点(temperory breakpoint):
(gdb) tb main.c:main // 临时断点到达后自动清除
单步(Step In):
(gdb) step[s]
单步(Step Over):
(gdb) next[n]
单步(Step Out):
(gdb) finish
运行到指定位置:
(gdb) until[u] main.c:main // 当前文件有效
(gdb) advance main.c:main // 跨文件有效
查看源代码:
(gdb) list[l] // 当前行附近代码
(gdb) list[l] main.c:main // 指定位置附近代码
查看变量值:
(gdb) print[p] val // 变量值
(gdb) print[p] val * 2 // 表达式值
(gdb) print[p] func(val) // 函数运算结果
(gdb) print[p] &val // 变量地址
(gdb) print[p] $register // 寄存器值
(gdb) print[p]/format val // 以不同格式打印
查看变量类型:
(gdb) whatis val // 信息简洁
(gdb) ptype val // 信息丰富
查看调用栈:
(gdb) where full
(gdb) backtrack[bt] full
查看本地变量:
(gdb) info[i] locals
查看内存:
(gdb) x/nfu 0x1234 // n: number, f: format, u: byte/word
查看反汇编:
(gdb) disassembly main.c:main
查看寄存器:
(gdb) info[p] registers all
修改变量:
(gdb) set val = 100 // 修改普通变量值
(gdb) set *p_val = 100 // 修改指针的值
(gdb) set $pc += 4 // 修改寄存器值
新建观察点:(每次单步自动打印该观察点的值)
(gdb) display val
查看观察点:
(gdb) info[i] display
删除观察点:
(gdb) undisplay 1 // 观察点序号
新建监视点:(当被监视点被读、写时,自动暂停程序)
(gdb) watch val // 监视写
(gdb) rwatch val // 监视读
(gdb) awatch val // 监视读和写
查看监视点:
(gdb) i watchpoints
删除观察点:
(gdb) delete[d] 1 // 监视点序号
(完)