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

    文章

    1212

    浏览量

    166851
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28361
  • 断点
    +关注

    关注

    0

    文章

    12

    浏览量

    7706

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

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

收藏 人收藏

    评论

    相关推荐

    网关断点续传可以实现什么功能

    在数字化时代,数据传输的效率和稳定性成为了衡量信息系统性能的重要指标之一。随着云计算、大数据、物联网等技术的飞速发展,数据量的爆炸性增长对数据传输技术提出了更高要求。在这样的背景下,网关断点
    的头像 发表于 10-16 13:53 203次阅读

    keil软件仿真如何仿真输入

    多种微控制器和处理器,如ARM、Cortex-M、8051等。Keil软件的主要功能包括: 代码编辑:提供语法高亮、代码折叠、自动补全等功能。 编译:将源代码编译成目标代码。 调试:在开发过程中,可以设置断点、单步执行、查看变量
    的头像 发表于 09-02 10:25 765次阅读

    如何把keil软件设置成中文

    以下是将Keil软件设置为中文的步骤: 下载并安装Keil软件: 首先,您需要从官方网站下载Keil软件的最新版本。请确保下载与您的操作系统兼容的版本。 启动
    的头像 发表于 09-02 10:21 5434次阅读

    TC2XX/3XX多核断点设置无效的原因?

    TC2XX/3XX多核断点设置无效,请问hinghtec的多核要怎么才能被触发,(函数已经执行,但是断点没有被触发)或者如何才能进行多核调试。
    发表于 07-03 07:33

    keil 断点 执行次数设置后,出现非法变量的错误

    keil 断点 执行次数设置后,出现非法变量的错误。希望大家帮帮忙。
    发表于 06-02 19:25

    InterfaceDesinger 使用案例-v1 -DDIO用法

      DDIO用法 对于输入输出IO很多时候会用到DDIO的用法。对于DDIO,就是时钟的双沿采集或者发送数据,所以必须要用到寄存器。它的设置也比较简单,在intefaceDesigner中添加
    的头像 发表于 05-20 16:30 858次阅读
    InterfaceDesinger 使用案例-v1 -DDIO<b class='flag-5'>用法</b>

    STM8在STLINK中仿真设置断点,某些行设置不了断点是怎么回事?

    (); } 在 TIM3_CAP_IRQ()函数里某些行里设备断点设置不了,如在337行中设置断点,会自动跳到346行中,在337行和342行设置
    发表于 04-30 08:02

    STM32F103中断服务程序里设置断点没有停下来是什么原因引起的?

    STM32F103程序,调试时在定时器中断服务程序中设置断点,但是没有停下来,程序能正常运行,看中断里的变量也有变化。多设置几个断点也没用。 其它地方
    发表于 04-07 08:02

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

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

    STM32F103使用keil5进入debug模式,断点能触发,但是程序还在运行,为什么?

    最近遇到一个问题,使用keil5进入debug模式,断点能触发,但是程序还在运行,就是板子上有个灯还在闪,这是定时器控制的,为啥程序停不下来啊。
    发表于 03-20 06:25

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

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

    AWTK 开源串口屏开发(10) - 告警信息的高级用法

    信息的显示和管理。本文介绍告警信息的两种高级用法:查询告警信息。如果告警信息比较多,我们需要通过查询,来快速找到我们想要的告警信息。查看告警信息的详情。如果某条告警
    的头像 发表于 02-24 08:23 307次阅读
    AWTK 开源串口屏开发(10) - 告警信息的<b class='flag-5'>高级</b><b class='flag-5'>用法</b>

    请问UDE调试有些函数前面是不能设置断点的吗?

    如下函数不能设置断点:IfxPort_togglePin( MODULE_P33, 8);IfxStm_waitTicks( MODULE_STM0, 5000000);
    发表于 02-20 06:55

    aduc842在keil中如何利用串口在线仿真,为何遇到断点后就无法再次运行?

    aduc842在keil中如何利用串口在线仿真,为何遇到断点后就无法再次运行,报错,串口等待时间过长
    发表于 01-15 08:30

    keil3 V3.22和mIDAS-Link RDI进行调试,请问怎么设置keil

    各位斑竹你们好,我用aduc7026扩展了外部ARM,ARM型号CY62256LL-70SNC,现在正用keil3 V3.22和mIDAS-Link RDI 进行调试,请问我该怎么设置keil?以下
    发表于 01-15 08:08