BUG 终结者,现场抓获!|颠覆认知
来源:公众号【鱼鹰谈单片机】
作者:鱼鹰Osprey
ID :emOsprey
不知道你是否有这样的经历,测试的机器运行半个月、一个月的都没啥问题,突然就死机了,或者运行错误了,总之莫名其妙。
但是此时,你的调试器已经从机器上拔下来了,无法在线调试观察死机后的现场了,你无法观察到你的变量、寄存器、外设、堆、栈等处于什么情况,这个时候你不得不重新接上调试器,再次运行程序以等待问题的出现。
这个笨方法存在几个问题:
第一、因为复现率太低,所以你的电脑必须一直连接电脑,否则问题出现了无法确认。
第二,万一中途因为各种原因(线拔了,KEIL意外退出了)导致调试器和机器的连接出现了问题,那么只能重来了。
第三,可能运行几个月都不会再出问题,但是你却知道,这里隐藏了一个炸弹,指不定什么时候就爆了;更有甚者,可能连接调试器后这个问题可能就没有了,但是断开之后就又有问题了。
针对以上问题,我们就会想,是否存在一种方法,能够在出现问题之后,可以使用调试器抓获现场环境呢?
我们都知道,KEIL 环境下,连接调试器后,单片机进入调试模式时,KEIL会自动将整个单片机进行复位(可能是内核复位,也可能是系统复位,也可能是RST引脚复位),复位操作对于刚下载的程序而言,可以很方便的帮助开发者更方便的进入调试环境,但是对于机器的问题现场而言,这是在破获现场!
但是根据以往的认知,我们总是以为进入调试模式时,必然需要先进行单片机复位的,所以我们对这种难复现的BUG总是感到无能为力。
今天,鱼鹰教大家一个方法,如何使用 KEIL 调试器抓获 STM32 的BUG现场(其他单片机可自行测试),这个方法将颠覆你的认知,可以在单片机运行时进入调试模式,从而抓获现场!
这个功能其实在某一个软件是集成了的(不记得哪一个软件了),但在 KEIL 中我们需要几步操作完成。
1、新建一个工程目标(可命名为 NotRest):
这样你可以看到你现在的目标:
接下来的所有操作都在这个目标进行。
事实上,如果只是为了抓获 BUG 现场,是不需要新建目标的,但是为了今后可以方便的不复位单片机也能进入调试模式,也为了不改变以前目标的配置,增加一个目标还是很有必要的,这样,你可以根据需要(是否复位芯片)切换目标了。
2、新建一个load.ini文件,文件内容如下:
LOAD %L INCREMENTAL
该文件用于加载 axf 文件到 KEIL 中,但是不会下载到单片机中,而 axf 文件可以方便我们进行源码级别的调试。
3、打开该目标的option进行配置:
4、点击仿真按钮,记住了,别点下载按钮(鱼鹰非常不喜欢别人先点下载按钮再点仿真按钮,因为刚编译后的代码,如果你直接点仿真按钮,在默认配置下会自动下载和进入调试模式的,比较方便)。
注意,一定要确定该目标可以正常使用(即不会复位单片机)才能真正用于实际的BUG现场,不要没有做测试就直接拿它去调试实际的单片机,否则可能因为没有正确配置,而破坏了现场环境(默认配置下,会直接复位单片机)!
点击【阅读原文】可看官网描述。
推荐阅读:
线程CPU使用率到底该如何计算?
许久以后,你会感谢自己写的异常处理代码
终极串口接收方式,极致效率
为什么说你一定要掌握 KEIL 调试方法?
延时功能进化论(合集)
指针,很难吗?| 解析指针的过程与意义(一)
如何写一个健壮且高效的串口接收程序?
KIEL 调试那些事儿之窗口展示——变量(二)
打了多年的单片机调试断点到底应该怎么设置?| 颠覆认知
-THE END-
如果对你有帮助,记得转发分享哦
微信公众号「鱼鹰谈单片机」
每周一更单片机知识
长按后前往图中包含的公众号关注
鱼鹰,一个被嵌入式耽误的畅销书作家
个人微信「EmbeddedOsprey」
长按后打开对方的名片关注
BUG 终结者,现场抓获!|颠覆认知相关推荐
- eclipsevue代码怎么运行_打了多年的单片机调试断点到底应该怎么设置? | 颠覆认知...
导读:程序运行过程中,有些数据被莫名修改了,在哪里修改的?又是怎么修改的?这个代码我只想知道是否运行过,或者运行了多少次,但是不想让程序停下来,或者仅打印调试信息,怎么办?当这个变量设置成某个数据后, ...
- Science新研究颠覆认知,有望一举解决困扰器官移植60余年问题,网友:生物课本得改了...
鱼羊 金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 看来这一次,免疫学教科书得改版了. 事情是这样的. 顶级期刊 Science 发表了一篇关于免疫学方面的重磅文章(共同一作还是一位华人 ...
- 美女主播变大妈:在bug翻车现场说测试策略
戳蓝字"CSDN云计算"关注我们哦! 美女主播变大妈: 在bug翻车现场说测试策略 文 | 珍妮兔 这两天直播圈发生了一起严重的翻车事故. 一个一直以"颜值主播" ...
- iOS教程之BUG终结者-欧阳坚-专题视频课程
iOS教程之BUG终结者-5208人已学习 课程介绍 很多学生在学习或者开发过程中,调试程序程序时要么无从下手要么还停留在NSLog和printf函数的打印中.通过本视频教程会让你对程 ...
- 一款颠覆认知的商务邮箱,即将成为职场人手必备的产品!
我是一个90后的小仙女,专门发掘各行业种草的好产品.大家平时用什么办公软件最多呢?Office.wps.电子邮箱.ps-本期介绍一款超有辨识度的商务邮箱产品,预测2021年绝对很火! 先来介绍下它的外 ...
- 颠覆认知——Redis会遇到的15个「坑」,你踩过几个?
阅读本文大约需要 20 分钟. 大家好,我是 Kaito. 这篇文章,我想和你聊一聊在使用 Redis 时,可能会踩到的「坑」. 如果你在使用 Redis 时,也遇到过以下这些「诡异」的场景,那很大概 ...
- 清华大学张亚勤对话朱民:颠覆认知的AI时代及产业机遇
来源:财经ThinkTank 4月28日,清华大学智能产业研究院院长.中国工程院外籍院士张亚勤与清华大学国家金融研究院院长.著名经济学家朱民进行对话. 张亚勤表示,对于ChatGPT横空出世,自己有三 ...
- 张亚勤对话朱民:颠覆认知的AI时代及产业机遇
来源:财经ThinkTank 4月28日,清华大学智能产业研究院院长.中国工程院外籍院士张亚勤与清华大学国家金融研究院院长.著名经济学家朱民进行对话. 张亚勤表示,对于ChatGPT横空出世,自己有三 ...
- 懂数学的程序员能有多吃香?这是我听过最好的答案丨颠覆认知
懂数学的程序员能有多吃香? 关于这个问题,我想每个程序员心中都有自己的答案. 之前在网上看到一个很有意思的答案说: 我是在做了2年的开发之后,才真正认识到数学对于程序员的重要性,开始系统的学习数学. ...
最新文章
- 如何高效读论文?剑桥CS教授亲授“三遍论”:论文最多读三遍,有的放矢,步步深入...
- 微信小程序长按事件触发点击事件的BUG处理
- html文本长度不一样的对齐,关于html:文本在中间不对齐
- 【机器学习基础】数学推导+纯Python实现机器学习算法12:贝叶斯网络
- boost::geometry::clear用法的测试程序
- Java多线程相关的常用接口
- 1台车至少赚1万块!华为卖车,两天订单破3000辆
- 外卖小哥到底是一群什么样的人?答案超乎你想象
- Silverlight学习笔记四BusyIndicator控件(进度条)
- 十大网站压力测试软件-- WEB压力测试工具介绍
- 《人工智能:一种现代的方法》总结 第二章
- WebLogic部署配置
- 《产品经理面试攻略》PART 2:简历
- python函数调用:带()和不带()的区别
- js pug 代码_Pug模板(一)
- autojs声明文件
- 通信中的MGF(矩生成函数)
- 你的善良必须有点锋芒
- 悲催呀,辞职后,竟然找不到工作了
- HyperMesh 2D网格划分