调试笔记–keil 断点调试小技巧

给变量打断点

调试不熟悉的项目时,卧槽!怎么这么多全局变量?这玩意又在那修改了??这个时候会给变量打断点就能省好多事。

  1. 将要监视的全局变量添加到watch窗口
  2. 选中要监视的全局变量,右键设置断点
  3. 设置断点条件

Expression: 设置断点条件, 表达式可以使用 == > < ! ,当条件为真时, Count 减一
Count:设置次数,当 Expression 为真 Count 减一,当Count为0时触发断点效果
Access:何时去判断表达式 Expression,如果勾选Read,则读变量时就会去判断表达式Expression,同理,勾选Write后,每当写变量时就回去判断表达式
Size、Bytes、Objects一般默认即可。
设置完后按Define即可设置断点。


4. 删除断点

打开debug菜单下的Breakpoints选项

选中要删除的断点, 点击Kill Selected

例子

当写入xiaoMing.age变量10次后触发断点

当变量 xiaoMing.age 等于 10时,触发断点

注意事项

  1. 给变量打断点的前提是,这个是全局变量

打断点其实就是DEBUG模块检测固定RAM地址,当有指令用的预定的RAM地址,将指令进行替换,局部变量存放在栈中,地址不固定因此不能这样操作。全局静态变量的作用域只是当前文件内可访问,因此如果强行使用可能导致结果不确定(有可能按照预期断点停止,也有可能不会)

既然原理是检测固定RAM地址,那么直接从Menory找到对应地址设置断点也是一样可行的

  1. 不可修改

断点设定好后,如下图,想要修改成只在写入时检测,即去掉Read的勾选,需要将改断点删除然后重新设置一个,不能在原来的上面进行修改。

  1. 遇到如下错误,一般是当前变量已经设置了断点,有些表达式不能重复设置断点,入下图的==
  2. 断点数量

断点分为软件断点和硬件断点,硬件断点数量由单片机内部硬件决定,实测M3、M4、M7内核是8个硬件断点,软件断点是调试器根据一定算法,动态的设置硬件断点,或者在调试过程中动态修改FLASH,达到断点数量无限制效果。

  • 手头有个CMSIS-DAP(第一代DAP)实测不支持软件断点,只由硬件按断点,当断点超出后MDK会给出提示

CMSIS-DAP 实在是需要软件断点,可以手动在需要加断点的代码前加上 __asm(“BKPT 0”); 可以无限个,但是在正式代码中一定记得剔除

  • jlinkV9 支持软件断点,但是软件断点可能会动态修改flash内容(本质也是添加 __asm(“BKPT 0”); 语句,只是由jlink自动添加)

MDK5断点调试,有时候断点乱跳,就有可能是用jlink调试 断点设置多了,jlink会修改flash内容,这个时候如果直接拔掉jlink,flash中就会保存断点信息,会影响正常运行而且下次调试时如果没有更新程序,mdk里面不会显示该断点,但是断点信息已经在flash中了,执行到对应语句依然会暂停

缺点

需要实时监听RAM,所以调试时运行速度慢,不适合和实时性要求较高的外围模块一起联调

调试笔记--keil 断点调试小技巧相关推荐

  1. 调试笔记--keil 测量周期小技巧

    调试笔记–keil 测量周期小技巧 本文参考安富莱专题教程第7期 http://www.armbbs.cn/forum.php?mod=viewthread&tid=87176&ext ...

  2. as的断点调试与高级断点调试

    <div class="markdown_views"><blockquote> 有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说A ...

  3. KEIL 断点调试技巧

    实际项目中断点调试起了很大作用,Keil的断点调试功能很强大,除了普通的设置断点运行到断点处,还有单步.跳转.除了这些常规的方法,对于一些疑难杂症,常规方法就有点杯水车薪了.下面我总结下我在工作中常用 ...

  4. c语言 vc 单步调试方法,VC6断点调试技巧

    在第一篇中,我们为大家介绍了如何用VC6进行断点调试,可以实现程序的分步执行.今天我们将继续深入,进行更多断点调试的学习. 首先,写一个例子程序: #include int fun() { print ...

  5. python linux 单步调试,python的断点调试

    python的断点调试(转自:http://control.blog.sina.com.cn/admin/article/article_add.php) pdb这个功能好牛啊,可以在命令行设置也可以 ...

  6. 用Eclipse调试Java程序的一些小技巧

    Created by Jerry Wang, last modified on Sep 11, 2015 1. 条件断点 选中断点,enable Conditional,以下图为例,意思是当j == ...

  7. 使用gdb调试运行时的程序小技巧 -转

    下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法: 情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序 情景2:需要同时看几个变量的值或者批量查看多个core文件的堆 ...

  8. 如何使用OneNote和draw.io来写数学笔记|我的记录小技巧

    做数学笔记是否有必要,如果有必要的话,用什么来做数学笔记呢.这个问题困扰了我很久.曾几何时,数学知识在我脑海里只有算术,初等函数性质,矩阵乘除计算等等,无法联系起来的抽象概念.而作为一个害怕丢分,又没 ...

  9. Simulink Test笔记(含一些小技巧)一

    说明 本文记录simulink test在使用过程中的心得,包含使用过程中新的发现及提高测试效率的一些技巧. 本文提到的内容均基于以下运行环境: MATLAB   版本 9.3 (R2017b) Si ...

最新文章

  1. 西门子数控面板图解_20190319工控维修日记(西门子系统第四讲)
  2. BCH粉必转 | 围绕BCH建立的相关项目和应用列表汇总
  3. 各数据库连接配置与maven依赖安装
  4. SAP License:SAP顾问是如何炼成的——SAP顾问的定义
  5. MYSQL定时创建表分区
  6. 计算机三级 信息安全技术题库——选择题1
  7. avr 运行 linux,linux(ubuntu9.04)安装avr编译环境
  8. 体验Windows Mobile 6.5 (模拟器)
  9. OpenGL ES 2.0 系列一
  10. php 获取照片信息,PHP如何读取照片的exif信息实现代码(2)
  11. Linux系统引导过程及引导修复
  12. 更改jenkins插件地址为国内源地址
  13. Ectiture impossible,doublon dans une cle de la错误
  14. 金融数据分析与挖掘具体实现方法 -1
  15. Java学习笔记:Word中创建图表如此简单
  16. 超级计算机在天文学的应用,破世界记录:交大π2.0超算系统实现天文学N体模拟粒子数新突破...
  17. 自动化测试到底该怎么学?
  18. 欧拉角,万向节锁和四元数
  19. Vue教程03-Vue脚手架开发环境
  20. matlab 计算变异系数,变异系数法求权重matlab 代码

热门文章

  1. PHP系统编程--01.多进程与多线程
  2. mac显示/隐藏文件
  3. WF4.0入门系列1——创建一个简单的工作流
  4. MAPGIS中输入分数和上下标格式的字符串。
  5. Eclipse搭建Android5.0应用开发环境 “ndk-build”:launchingfailed问题解决
  6. Control.BeginInvoke 和 Delegate.BeginInvoke 备忘
  7. python学习干货教程(11):元组
  8. docker设置固定ip地址
  9. angular HttpClient post put patch del 方法(2)-Promise 服务
  10. 快速批量导入庞大数据到SQL SERVER数据库(ADO.NET)