在线调试程序时,打断点是非常有效的一种方式,配合单步调试,可以快速定位问题。但有的时候,手动打断点用起来不是那么方便。
比如,想要在一个循环的第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的使用帮助文档。
智能驾驶域控制器的架构应用方案的演进
家用电脑可以挖掘加密货币?
国内智能换相装置研究综述
欧姆龙Omron Host Link转Modbus协议网关
双色玻璃管液位计的简介与注意事项
Keil调试时设置断点的高级用法
小冰公司完成 Pre-A 轮融资
未来无人机的应用市场还将继续不断向上发展
浅析Dialog可穿戴设备解决方案
可随时监控蜂巢情况的传感智能监控设备
jenkins有什么用_jenkins如何自动部署
不一样的智能魔镜显示屏,带来非凡的体验效果
探究TINA技术在数字系统设计分析过程中的应用
基于FPGA和SRAM的数控振荡器的设计与实现
陕西省首个移动5G联创开放实验室正式落户西安
因美国施压,台积电南京国产遭遇阻力
科莱恩宣布投资增强中国乙氧基化工厂的产能
电池的内阻知识
逐渐迸发市场潜力的接触觉传感器
智能多媒体服务 Dora,让用户获得更好的音视频体验