黄丽丽
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | Keil调试时设置断点的高级用法
Keil调试时设置断点的高级用法

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

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

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

cdbc5002ad4748d894e26ed925dc58.jpg

点击Debug菜单,选择BreakPoints:

f79cbc77db634eaedaeb3db0ea5ba6.jpg

弹出下面菜单:

2c78ddb25bfbffcb6ae039ffa8b845.jpg

最上面的断点是手动打的,双击该断点,会看到Expression会显示该断点的信息,修改Count的值为10,点击Define,然后关闭该窗口。这里说明一下:          Expression为表达式,即断点的条件,可以看到,手动设置的断点结尾为\123,表示在main.c文件的123行。这里支持基本的>、<、==、!=等操作符。<>

Count为次数,表示运行多少次中断一次,手动设置的断点Count都是1。
Command为命令,表示到达该断点时执行的命令,默认为空。
按照上面的设置,运行程序。可以看到,程序运行到断点时没有马上停下,而是在第10次才停下来:

b58991c38acedad52c57f08038f3fe.jpg


2.变量匹配断点

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

bd06145b99e28a3c6f1e8e00a00ca0.jpg

6560e2cbb517137dae3b7ac4058782.jpg

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

3.变量条件匹配断点

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

48aab00fc42bc1f6a1e306188b71b9.jpg

4.打印信息

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

5d46ecb6aeeca11171222fbaa7d106.jpg

c53a54b7ed3158f8b44e3f18f112fe.jpg

5.条件匹配打印信息

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

61596a15b955e6c6ef95d73631aed6.jpg

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

f690ee3b2bee8af432af50f3075dde.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论