在线调试程序时,打断点是非常有效的一种方式,配合单步调试,可以快速定位问题。但有的时候,手动打断点用起来不是那么方便。 比如,想要在一个循环的第N次停下来,如果手动打断点,那就要不停的点击单步运行,直到循环运行到第N次。 再比如,程序运行过程中变量不知何时被改变了,又不好定位,手动打断点就不知打在哪里。这时就要用到一些断点的高级用法。
1、设置断点的运行次数
以下面程序为例,在循环的第十次将程序停止。首先在循环中手动打一个断点:

点击Debug菜单,选择BreakPoints:

弹出下面菜单:

最上面的断点是手动打的,双击该断点,会看到Expression会显示该断点的信息,修改Count的值为10,点击Define,然后关闭该窗口。这里说明一下:Expression为表达式,即断点的条件,可以看到,手动设置的断点结尾为123,表示在main.c文件的123行。这里支持基本的>、<、==、!=等操作符。Count为次数,表示运行多少次中断一次,手动设置的断点Count都是1。Command为命令,表示到达该断点时执行的命令,默认为空。 按照上面的设置,运行程序。可以看到,程序运行到断点时没有马上停下,而是在第10次才停下来:

2、变量匹配断点
将变量添加到Watch窗口,右击选择Set Access BreakPoint at xxx。还是弹出刚才的菜单:


勾选Access方式Read或Write,设置Count值,点击Define。这里选择Write,Count值为4,表示该变量第四次被写入时程序会停止。
3、变量条件匹配断点
跟上一步一样,在Watch窗口,右击变量选择Set Access BreakPoint at xxx。勾选Access方式Read或Write,删除Expression下原来的内容,填写表达式“AD== 10”。点击Define。这样当AD==10时程序会停止。

4、打印信息
选择一个手动打好的断点,然后在Command下填写printf(),则在运行到断点处时,程序不会停止,而是在Command窗口打印设置的信息。


5、条件匹配打印信息
还可以将3和4组合使用,如下:

则AD==10时,程序不中断,在Command窗口打印信息。 断点的高级用法还有很多种,不同的表达式,不同的指令等,具体可查阅Keil的使用帮助文档。

END
审核编辑 :李倩
-
keil
+关注
关注
69文章
1224浏览量
171812 -
变量
+关注
关注
0文章
615浏览量
29370 -
断点
+关注
关注
0文章
12浏览量
8039
原文标题:Keil调试时设置断点的高级用法
文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
电能质量在线监测装置支持断点续传的文件传输协议有哪些?
基于蜂鸟E203的硬件断点功能添加
工业网关的断点续传有哪些作用
UPS电源“不间断点”全解析:技术原理、关键指标与选购避坑指南
工业智能网关的断点续传功能体现在那些方面
求助,关于PFM-M2351开发环境设置的问题求解
在 Keil / IAR 开发环境下的 Debug 模式下,用户是否可以在空闲 ru 期间立即添加新的断点?
边缘计算网关支持断点续传吗
Keil C51与Proteus联调,为何在Keil中设置的断点失效?
STM32CubeIDE编译设置是否有像keil一样有编译后执行Bat脚本的功能和设置?
HarmonyOS NEXT 原生应用/元服务-ArkTS代码调试使用断点
hyper 网络设置,Hyper-V网络设置:高级网络配置技巧
hyper-v 配置,Hyper-V配置:性能优化与高级设置
keil在Debug的高级用法

Keil设置断点的高级用法
评论