你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Keil-MDK 在线调试设置断点的高级用法

[复制链接]
STMCU小助手 发布时间:2023-2-9 14:37

在线调试程序时,打断点是非常有效的一种方式,配合单步调试,可以快速定位问题。但是有时候,手动打断点用起来不是那么方便。

比如想要在一个循环的第N次停下来,如果手动打断点,那就要不停的点击单步运行,直到循环运行到第N次。再比如,程序运行过程中变量不知何时被改变了,又不好定位,手动打断点就不知打在哪里。这时就要用到一些断点的高级用法。


1.设置断点的运行次数
以下面程序为例,在循环的第十次将程序停止。首先在循环中手动打一个断点:
微信图片_20230209144235.png
点击Debug菜单,选择BreakPoints:
微信图片_20230209144232.png
弹出下面菜单:
微信图片_20230209144146.png
最上面的断点是手动打的,双击该断点,会看到 Expression 会显示该断点的信息,修改 Count 的值为 10,点击 Define,然后关闭该窗口。

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

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

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


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

微信图片_20230209144139.png

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


微信图片_20230209144135.png

微信图片_20230209144126.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 时程序会停止。
微信图片_20230209144123.png

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


微信图片_20230209144119.png



微信图片_20230209144114.png

5.条件匹配打印信息
还可以将 3 和 4 组合使用,如下:
微信图片_20230209144110.png
则 AD==10 时,程序不中断,在 Command 窗口打印信息。断点的高级用法还有很多种,不同的表达式,不同的指令等,具体可查阅 Keil的使用帮助文档。
微信图片_20230209144102.png


转载自:一起学嵌入式
收藏 评论2 发布时间:2023-2-9 14:37

举报

2个回答
jundao721 回答时间:2023-2-9 14:59:59

学习了

懒得起名1 回答时间:29 分钟前

image.png

问一下,这情况有遇到过吗?怎么解决

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版