用J-Link调试程序时,断点设不上,先看目标芯片的硬件断点是否已用完,再看代码位于RAM还是Flash。硬件断点的数量由芯片决定,不能通过修改J-Link设置增加;能调整的是各个断点采用哪种实现方式。
一、J-Link怎么设置断点资源
1、查看断点占用情况
先找出当前启用了哪些代码断点、哪些数据监视点。J-Link控制面板会列出由J-Link软件管理的断点及其实际实现方式。
①启动调试会话,点击系统托盘中的【J-Link】图标,打开控制面板。
②点击【Breakpoints】,分别查看【Code breakpoints】和【Data breakpoints】。
③在【Code breakpoints】中对照【Address】与【Actual impl.】,记下占用硬件资源的断点。
2、在Ozone中指定断点类型
若使用Ozone,可以在每个断点的属性中设置允许的实现方式。设置前先确认断点地址:RAM中的代码通常可以使用软件断点;Flash中的代码还要看Flash断点功能是否可用。
①打开Ozone的【Breakpoints】窗口,找到需要调整的断点。
②右键点击该断点,选择【Edit】。
③点击【Permitted Impl.】,选择适合该地址的实现方式;需要自动分配时选择【Any】。
④点击【OK】,返回【Breakpoints】窗口查看断点状态。
⑤打开J-Link控制面板的【Breakpoints】页,核对该断点的【Actual impl.】。
二、J-Link硬件断点数量不足如何处理
1、清理不用的断点
调试到新函数后,旧位置上的断点可能仍处于启用状态。先释放这部分资源,再设置当前需要的断点。
①在调试器的【Breakpoints】窗口选中暂时不用的断点,右键选择【Disable】或【Clear】。
②重新设置目标断点,点击【Continue】,确认程序能在该处暂停。
2、将RAM断点改为软件实现
软件断点通过修改目标指令工作,不占用代码硬件断点单元。操作前应核对地址确实位于可写的RAM区域。
①在【Breakpoints】窗口查看断点地址,对照链接文件确认它位于RAM。
②右键点击该断点,选择【Edit】。
③在【Permitted Impl.】中选择软件实现方式,点击【OK】。
④继续运行程序,确认断点触发,并在【Actual impl.】中核对实际类型。
3、检查Flash断点是否可用
程序运行在Flash中时,支持该目标设备及功能的J-Link可以使用Flash断点,减少对硬件断点单元的依赖。该方式会涉及Flash重新编程,是否可用还取决于设备支持情况和J-Link的功能状态。
①点击系统托盘中的【J-Link】图标,进入控制面板。
②打开【Settings】,在【Flash breakpoints】中选择【Auto】。
③查看【Status】,确认Flash断点功能处于可用状态。
④打开【Flash】页,检查目标代码所在的Flash区域是否被识别。
⑤返回调试器,重新设置原先失败的断点并运行验证。
4、检查断点是否被强制设为硬件类型
有些断点被指定为仅使用硬件实现。即使其他实现方式可用,这类断点仍会占用有限的硬件资源。
①在Ozone的【Breakpoints】窗口右键点击待查断点,选择【Edit】。
②检查【Permitted Impl.】;对无需固定使用硬件的断点,改选【Any】并点击【OK】。
③重新运行程序,查看资源不足提示是否消失。
三、断点调整后还要检查什么
1、分清代码断点与数据监视点
监视变量读写使用的是数据监视点。Flash断点功能针对代码执行位置,不能用来增加芯片的数据监视资源。
①在J-Link控制面板点击【Breakpoints】,查看报错对应的是【Code breakpoints】还是【Data breakpoints】。
②若不足的是数据监视点,在调试器中关闭不再需要的读写监视条件。
2、使用GDB时检查功能开关
通过J-Link GDB Server调试的工程,可以从GDB控制台启用Flash断点。命令执行成功后,还需检查目标设备和J-Link的功能状态。
①在【GDB控制台】输入monitor flash breakpoints=1,按【Enter】。
②查看命令返回信息,并在J-Link控制面板的【Settings】页检查【Status】。
③重新设置Flash区域中的断点,运行程序确认能否触发。
3、按原位置复查
断点图标显示为启用,只说明它已加入调试列表。最终还要核对实际实现方式,以及程序是否停在预期指令处。
①在【Breakpoints】窗口核对目标断点的地址和启用状态。
②在J-Link控制面板的【Breakpoints】页查看【Actual impl.】。
③点击【Continue】,确认程序停在预期位置。
④若仍报资源不足,记录失败的断点地址、芯片型号和当前已启用的断点,再逐个核对。
总结
断点资源问题常在调试范围扩大后出现:原先只盯一个函数,几个硬件断点已经够用;开始追踪多条执行路径,旧断点却没有及时清理。把关键断点、临时断点和数据监视点的用途记录清楚,切换调试目标时就更容易安排资源。希望这篇关于J-Link断点设置和硬件断点不足的文章能对大家有所帮助;如有J-Link相关需求,欢迎联系我们咨询。