0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Keil设置断点的高级用法

Q4MP_gh_c472c21 来源:嵌入式技术开发 作者:嵌入式技术开发 2022-05-10 14:17 次阅读

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

1、设置断点的运行次数

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

c9379c7e-d016-11ec-bce3-dac502259ad0.png

点击Debug菜单,选择BreakPoints:

c94f577e-d016-11ec-bce3-dac502259ad0.png

弹出下面菜单:

c9750d02-d016-11ec-bce3-dac502259ad0.png

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

c9940f7c-d016-11ec-bce3-dac502259ad0.png

2、变量匹配断点

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

c9a92f92-d016-11ec-bce3-dac502259ad0.png

c9bd850a-d016-11ec-bce3-dac502259ad0.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时程序会停止。

c9da0c7a-d016-11ec-bce3-dac502259ad0.png

4、打印信息

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

c9f67cac-d016-11ec-bce3-dac502259ad0.png

ca0cac16-d016-11ec-bce3-dac502259ad0.png

5、条件匹配打印信息

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

ca22543a-d016-11ec-bce3-dac502259ad0.png

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

ca4071cc-d016-11ec-bce3-dac502259ad0.png

END

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • keil
    +关注

    关注

    68

    文章

    1196

    浏览量

    165277
  • 变量
    +关注

    关注

    0

    文章

    594

    浏览量

    28109
  • 断点
    +关注

    关注

    0

    文章

    11

    浏览量

    7655

原文标题:Keil调试时设置断点的高级用法

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎么啦?你的Keil C51和Keil MDK还无法共存吗?

    一、安装KeilC51将安装路径设置为:D:\software\Keil\Keil_C51二、安装KeilMDKCore安装路径设置为:D:\software\
    的头像 发表于 03-24 08:09 341次阅读
    怎么啦?你的<b class='flag-5'>Keil</b> C51和<b class='flag-5'>Keil</b> MDK还无法共存吗?

    keil在线调试无法设置断点怎么解决?

    使用的是Keil IDE及Jlink仿真器,但是keil启动在线仿真时无法设置断点,仿真前设置断点
    发表于 11-03 06:11

    怎么在keil中添加断点

    怎么在keil中添加断点
    发表于 10-20 06:22

    GDB调试里怎么设置断点

    本篇讲解使用GDB调试Linux应用程序,以下以 hellowld.c 为例介绍 GDB 的调试入门: 设置断点   disable                 # 禁用所有断点
    的头像 发表于 10-04 16:10 557次阅读

    KEIL 中通过 opt.s 文件设置 Option Bytes

    KEIL 中通过 opt.s 文件设置 Option Bytes
    的头像 发表于 09-28 17:30 683次阅读
    在 <b class='flag-5'>KEIL</b> 中通过 opt.s 文件<b class='flag-5'>设置</b> Option Bytes

    关于keil软件设置断点问题求解

    我写的一个程序有几个大的子函数,子函数中又有小的子函数,小的子函数中还有更小的子函数,我想在更小的子函数中设置断点,观察运行情况,但是无法添加。在子函数中和小的子函数中的语句可以添加断点,但是更深的子函数就不可以了。请问为什么?
    发表于 08-25 06:15

    C语言中位运算符的高级用法(6)

    在上一篇文章中,我们介绍了~运算符的高级用法,本篇文章,我们将介绍
    发表于 08-22 10:51 164次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(6)

    C语言中位运算符的高级用法(5)

    在上一篇文章中,我们介绍了~运算符的高级用法,本篇文章,我们将介绍
    发表于 08-22 10:49 173次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(5)

    C语言中位运算符的高级用法(4)

    在上一篇文章中,我们介绍了^运算符的高级用法,本篇文章,我们将介绍~ 运算符的一些高级用法
    发表于 08-22 10:48 139次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(4)

    C语言中位运算符的高级用法(3)

    在上一篇文章中,我们介绍了|运算符的高级用法,本篇文章,我们将介绍^ 运算符的一些高级用法
    发表于 08-22 10:47 149次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(3)

    C语言中位运算符的高级用法(2)

    在上一篇文章中,我们介绍了&运算符的高级用法,本篇文章,我们将介绍| 运算符的一些高级用法
    发表于 08-22 10:45 182次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(2)

    C语言中位运算符的高级用法(1)

    在上一篇文章中,我们介绍了&运算符的基础用法,本篇文章,我们将介绍& 运算符的一些高级用法
    发表于 08-22 10:44 177次阅读
    C语言中位运算符的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>(1)

    KEIL调试STM32在运行在打断点位置后芯片复位是什么原因导致的

    如题,在用Keil仿真时,在断点满足的地方,芯片复位,有可能是什么原因导致的呢?现象是这样:我运行程序,在某个条件中设下断点,然后等外面条件成立后,按理说程序会停在断点位置,但是实际上
    发表于 08-07 06:25

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

    在线调试程序时,打断点是非常有效的一种方式,配合单步调试,可以快速定位问题。但有的时候,手动打断点用起来不是那么方便。
    的头像 发表于 08-04 09:34 2327次阅读
    <b class='flag-5'>Keil</b>调试时<b class='flag-5'>设置</b><b class='flag-5'>断点</b>的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>

    NE76003使用keil调试仿真时,代码超过2K无法打断点怎么解决?

    NE76003使用keil调试仿真时,代码超过2K无法打断点。求助各路大神有没**招数
    发表于 06-27 07:10