调试笔记--keil 断点调试小技巧
调试笔记–keil 断点调试小技巧
给变量打断点
调试不熟悉的项目时,卧槽!怎么这么多全局变量?这玩意又在那修改了??这个时候会给变量打断点就能省好多事。
- 将要监视的全局变量添加到watch窗口
- 选中要监视的全局变量,右键设置断点
- 设置断点条件
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时,触发断点
注意事项
- 给变量打断点的前提是,这个是全局变量
打断点其实就是DEBUG模块检测固定RAM地址,当有指令用的预定的RAM地址,将指令进行替换,局部变量存放在栈中,地址不固定因此不能这样操作。全局静态变量的作用域只是当前文件内可访问,因此如果强行使用可能导致结果不确定(有可能按照预期断点停止,也有可能不会)
既然原理是检测固定RAM地址,那么直接从Menory找到对应地址设置断点也是一样可行的
- 不可修改
断点设定好后,如下图,想要修改成只在写入时检测,即去掉Read的勾选,需要将改断点删除然后重新设置一个,不能在原来的上面进行修改。
- 遇到如下错误,一般是当前变量已经设置了断点,有些表达式不能重复设置断点,入下图的==
- 断点数量
断点分为软件断点和硬件断点,硬件断点数量由单片机内部硬件决定,实测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 断点调试小技巧相关推荐
- 调试笔记--keil 测量周期小技巧
调试笔记–keil 测量周期小技巧 本文参考安富莱专题教程第7期 http://www.armbbs.cn/forum.php?mod=viewthread&tid=87176&ext ...
- as的断点调试与高级断点调试
<div class="markdown_views"><blockquote> 有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说A ...
- KEIL 断点调试技巧
实际项目中断点调试起了很大作用,Keil的断点调试功能很强大,除了普通的设置断点运行到断点处,还有单步.跳转.除了这些常规的方法,对于一些疑难杂症,常规方法就有点杯水车薪了.下面我总结下我在工作中常用 ...
- c语言 vc 单步调试方法,VC6断点调试技巧
在第一篇中,我们为大家介绍了如何用VC6进行断点调试,可以实现程序的分步执行.今天我们将继续深入,进行更多断点调试的学习. 首先,写一个例子程序: #include int fun() { print ...
- python linux 单步调试,python的断点调试
python的断点调试(转自:http://control.blog.sina.com.cn/admin/article/article_add.php) pdb这个功能好牛啊,可以在命令行设置也可以 ...
- 用Eclipse调试Java程序的一些小技巧
Created by Jerry Wang, last modified on Sep 11, 2015 1. 条件断点 选中断点,enable Conditional,以下图为例,意思是当j == ...
- 使用gdb调试运行时的程序小技巧 -转
下面介绍我调试时经常遇到的三种问题,如果大家也有类似的问题交流一下解决方法: 情景1:在不中止程序服务的情况下,怎么调试正在运行时的程序 情景2:需要同时看几个变量的值或者批量查看多个core文件的堆 ...
- 如何使用OneNote和draw.io来写数学笔记|我的记录小技巧
做数学笔记是否有必要,如果有必要的话,用什么来做数学笔记呢.这个问题困扰了我很久.曾几何时,数学知识在我脑海里只有算术,初等函数性质,矩阵乘除计算等等,无法联系起来的抽象概念.而作为一个害怕丢分,又没 ...
- Simulink Test笔记(含一些小技巧)一
说明 本文记录simulink test在使用过程中的心得,包含使用过程中新的发现及提高测试效率的一些技巧. 本文提到的内容均基于以下运行环境: MATLAB 版本 9.3 (R2017b) Si ...
最新文章
- 西门子数控面板图解_20190319工控维修日记(西门子系统第四讲)
- BCH粉必转 | 围绕BCH建立的相关项目和应用列表汇总
- 各数据库连接配置与maven依赖安装
- SAP License:SAP顾问是如何炼成的——SAP顾问的定义
- MYSQL定时创建表分区
- 计算机三级 信息安全技术题库——选择题1
- avr 运行 linux,linux(ubuntu9.04)安装avr编译环境
- 体验Windows Mobile 6.5 (模拟器)
- OpenGL ES 2.0 系列一
- php 获取照片信息,PHP如何读取照片的exif信息实现代码(2)
- Linux系统引导过程及引导修复
- 更改jenkins插件地址为国内源地址
- Ectiture impossible,doublon dans une cle de la错误
- 金融数据分析与挖掘具体实现方法 -1
- Java学习笔记:Word中创建图表如此简单
- 超级计算机在天文学的应用,破世界记录:交大π2.0超算系统实现天文学N体模拟粒子数新突破...
- 自动化测试到底该怎么学?
- 欧拉角,万向节锁和四元数
- Vue教程03-Vue脚手架开发环境
- matlab 计算变异系数,变异系数法求权重matlab 代码
热门文章
- PHP系统编程--01.多进程与多线程
- mac显示/隐藏文件
- WF4.0入门系列1——创建一个简单的工作流
- MAPGIS中输入分数和上下标格式的字符串。
- Eclipse搭建Android5.0应用开发环境 “ndk-build”:launchingfailed问题解决
- Control.BeginInvoke 和 Delegate.BeginInvoke 备忘
- python学习干货教程(11):元组
- docker设置固定ip地址
- angular HttpClient post put patch del 方法(2)-Promise 服务
- 快速批量导入庞大数据到SQL SERVER数据库(ADO.NET)