调试工具:j-link
点击ok之后,看到j-link栏目有connected字样就是连接成功
在arm-none-eabi-gdb.exe 文件夹下面启动cmd
替换成你的的elf文件(也可以直接输入arm-none-eabi-gdb.exe 之后,将elf文件拖拽到命令行处)
arm-none-eabi-gdb.exe zephyr.elf
如下是我的demo
回车出现如下画面:
连接目标端口(一般用默认的即可)
target remote localhost:2331
输入load
往MCU中加载调试文件,也就是常见的烧录过程
load
在main函数中打断点
break main
输入 c就是继续执行的意思
常用gdb指令:
monitor reset //复位
load //下载文件
c //继续运行
delete //删除断点
break cenon_app.c:277 if devContext.lcmState==0 //条件断点
info breakpoints //查看断点信息
bt //打印当前堆栈信息
info args
打印出当前函数的参数名及其值。
info locals
打印出当前函数中所有局部变量及其值。
awatch devContext.lcmState==0 //
rwatch 命令:只要程序中出现读取目标变量(表达式)的值的操作,程序就会停止运行;
awatch 命令:只要程序中出现读取目标变量(表达式)的值或者改变值的操作,程序就会停止运行。
i frame //查看堆栈信息
p &devContext.lcmState //打印地址信息
disable breakpoints_num //失能断点号
enable breakpoints_num //使能断点号
有问题重新下载代码(步骤为 monitor reset 然后load 最后 c)
b main.c:main 运行到main.c并且打断点
info variables
p 全局变量名 //查看全局变量
break main.c:145 在main.c的145行打断点
info break 查看断点信息(包括断点号)
info break num //查看num号断点的信息
delete num //删除num号断点
delete //删除所有断点
list //列举源码
step //单步运行
finish //完成该函数的调试
参考博客:
https://cedar-renjun.github.io/2015/10/04/Use-gdb-debug-cortex-m-mcu-via-jlink-gdb-server/