一:断点的分类
1.按照实现原理可以将断点分为软件断点、硬件断点合ETM断点
①软件断点:调试器在对应的地址处,将指令改写为HLT指令在RAM、DDR等区域,
可以设置无限个断点
Flash、ROM等区域无法使用。
②硬件断点:
与芯片内核相关,调试器设置对应的断点寄存器
可以应用于Flash、ROM、RAM等区域
断点数量有限
③ETM断点
ARM部分芯片特有,Cortex-M系列没有
调试器通过设置ARM Coresight ETM寄存器来实现
用于扩展Onchip断点的功能,例如地址范围断点、数据断点等数量有限、断点有一定的延时
2.按照断点的使用场景可分为
①程序断点(Program Breakpoints)
程序断点,可以是软件(Soft)断点,也可以是硬件(Onchip)断点
当程序运行到指定位置时,停下CPU(内核)
最常用的断点
②读写断点(Read/Write Breakpoints)
读写断点只能是硬件(Onchip)断点
当指定内存/变量,发生读写行为时,停下CPU(内核)
③数据断点(Data Breakpoints)
数据断点只能是硬件(Onchip)断点
当指定内存/变量,发生读写指定值时,停下CPU(内核)
④高级断点(Advanced Breakpoints)
i)COUNT计数断点
统计断点命中的次数,当满足
一定次数时,停下CPU/内核
ii)条件断点
CONDITION条件
断点成立时,还需要满足特定的条件
CMD命令
当所有条件成立,执行预先定义好的脚本
3.按断点对CPU运行的影响,可以分为:
①实时/非侵入式断点(Real-time Breakpoint)
断点在判断过程中,对CPU的实时运行,没有影响断点会以实心竖线|显示
②侵入式断点(Intrusive Breakpoint)
断点在判断过程中,对CPU的运行有影响,会不断停下CPU进行判断
二:如何下断点
1.方法一:在源码窗口找到需要设置程序断点的位置,直接双击打断点
2.方法二:在符号表信息中找到需要设置程序断点的函数,右键Breakpoints-Program
3.方法三:在断点设置窗口进行设置
4.方法四:命令行设置,简单快捷普通断点
5.使用通配符,批量设置断点
四:如何设置断点
1.程序断点实现原理的修改(Soft↔Onchip)
对于只能是Onchip断点的场景,调试器会默认设置:例如flash区域的程序断点、读写断点、数据断点等
对于RAM/DDR区域的程序断点,可以这样切换实现方式
2.程序断点(区间)的设置
例如,设置程序断点,当CPU运行到一个区间范围内停下来
部分芯片内核,不支持使用地址范围设置断点 这时候可以使用ETM断点
3.读写断点的设置
方法一:在源码窗口找到需要设置读写断点的变量,右键Breakpoints,选择断点类型
方法二:
在符号表信息中找到需要设置读写断点的变量,右键Breakpoints
方法三:从断点设置窗口开始设置
方法四:使用命令设置读写断点
4.数据断点的设置
方法一:从断点设置窗口开始设置
方法二:使用命令设置读写断点
数据断点(bit断点)的设置
一个变量发生写,并且特定的几个bit为特定的值时,触发断点生效,停下CPU
5.高级断点的设置
五:CPU没有停下来能否设断点?
六:为什么断点不能命中?
符号表与代码不匹配