west命令详解:debug

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            // 监视点序号

(完)