JLink + GDB 调试方法

本节主要介绍嵌入式开发中常用的JLink+GDB调试方法。

调试所需软件 J-link,可以从https://www.segger.com下载对应操作系统的软件包,然后安装
(注意:segger是仿真器的名字,相当常用的一款,仿真器的接口也是固定的,一般开发版上都会带有这个调试接口,如图)
image

运行JLinkGDBServer
image

按照上图中的配置,配置GDBServer,然后点击OK,进入下一个界面
image

注意,如果硬件连接没有问题,那么上图中的J-Link和 Device栏中显示绿色,GDB显示为红色,因为我们还没有运行GDB软件。另外,请注意图中的“Listening on TCP/IP port 2331”,这个端口要我们在运行GDB时需要。

运行GDB,开始调试(例如:调试镜像为helloworld):

a. 打开命令行,进入到镜像所在目录,执行命令 arm-none-eabi-gdb   helloworld.elf
b. 连接GDBServer的2331端口。在GDB命令行中执行命令 tar ext:2331
c. 设置断点,如在ResetHandler处设置断点,执行命令 b ResetHandler
d.  开始运行,执行命令 r 

复位命令执行后,程序将停止在ResetHandler处。 还可以设置其他断点, 如 b main、b HardFault_Handler等。其他GDB命令都支持,如图:
image

常用技巧 -- watch命令

 什么是watchpoint?

  watchpoint,顾名思义,其一般用来观察某个变量/内存地址的状态(也可以是表达式),如可以监控该变量/内存值是否被程序读/写情况。

 在gdb中可通过下面的几种方法来设置watchpoint:

  (gdb) watch  
 在指定变量/内存地址(表达式)expr设置一个watchpoint。一但expr值有变化时,将停住程序。

  (gdb) rwatch
 当expr被读时,停住程序。

  (gdb) awatch
 当expr被读或被写时,停住程序。

  (gdb) info watchpoints

查看watchpoint

(gdb)d n
删除watchpoint, 同删除breakpoint一样

举例:
想监控0地址处其实的1K字节是否被访问,若有read或者write访问,则程序停下
awatch (char[1024])*0x0

想监控0x1001dd08处的一段结构体的内部数据是否被改写,若发生改写则程序停下,只读无影响
watch ((k_mm_list_t *)0x1001dd08)->mbinfo->free_ptr

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值