Keil调试时设置断点的高级用法

003ec9147ed468a981955839f190a8e8.png

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

1.设置断点的运行次数。

    以下面程序为例,在循环的第十次将程序停止。首先在循环中手动打一个断点:

5e602cf30c81117e71af050b88ead27e.png

点击Debug菜单,选择BreakPoints:

8ac79d6a1852a5a30ce4454459f4c9c4.png

弹出下面菜单:

499c66aab874c07db27be035def48c47.png

最上面的断点是手动打的,双击该断点,会看到Expression会显示该断点的信息,修改Count的值为10,点击Define,然后关闭该窗口。这里说明一下:          

Expression为表达式,即断点的条件,可以看到,手动设置的断点结尾为\123,表示在main.c文件的123行。这里支持基本的>、<、==、!=等操作符。

Count为次数,表示运行多少次中断一次,手动设置的断点Count都是1。

Command为命令,表示到达该断点时执行的命令,默认为空。

按照上面的设置,运行程序。可以看到,程序运行到断点时没有马上停下,而是在第10次才停下来:

8322c117aa0b8de752b64ddb977104f3.png

2.变量匹配断点

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

55ba7e2b5b0ba33e995e055d95278ed7.png

7156a74532ac17544bf6ffc4afe0fb8e.png

勾选Access方式Read或Write,设置Count值,点击Define。这里选择Write,Count值为4,表示该变量第四次被写入时程序会停止。

3.变量条件匹配断点

跟上一步一样,在Watch窗口,右击变量选择Set Access BreakPoint at xxx。勾选Access方式Read或Write,删除Expression下原来的内容,填写表达式“AD== 10”。点击Define。这样当AD==10时程序会停止。

8f6f3f816db11b272dd856089a52f753.png

4.打印信息

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

25533cae5c9e4068c8d4180f4d10939b.png

84eb509622c9e113c956dcacfb326cb6.png

5.条件匹配打印信息

还可以将3和4组合使用,如下:

6d03cdd2041a6408c61be55faacb3fec.png

则AD==10时,程序不中断,在Command窗口打印信息。

断点的高级用法还有很多种,不同的表达式,不同的指令等,具体可查阅Keil的使用帮助文档。

179435e81ed29a11fcbc7d3d8128f692.png

推荐阅读:

ITM机制-不用串口也能printf

怎样测量单片机程序的运行时间?

几种常用电流互感器采样电路

让蜂鸣器唱个歌~《像我这样的人》

   欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值