来源:公众号【鱼鹰谈单片机】

作者:鱼鹰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 终结者,现场抓获!|颠覆认知相关推荐

  1. eclipsevue代码怎么运行_打了多年的单片机调试断点到底应该怎么设置? | 颠覆认知...

    导读:程序运行过程中,有些数据被莫名修改了,在哪里修改的?又是怎么修改的?这个代码我只想知道是否运行过,或者运行了多少次,但是不想让程序停下来,或者仅打印调试信息,怎么办?当这个变量设置成某个数据后, ...

  2. Science新研究颠覆认知,有望一举解决困扰器官移植60余年问题,网友:生物课本得改了...

    鱼羊 金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 看来这一次,免疫学教科书得改版了. 事情是这样的. 顶级期刊 Science 发表了一篇关于免疫学方面的重磅文章(共同一作还是一位华人 ...

  3. 美女主播变大妈:在bug翻车现场说测试策略

    戳蓝字"CSDN云计算"关注我们哦! 美女主播变大妈: 在bug翻车现场说测试策略 文 | 珍妮兔 这两天直播圈发生了一起严重的翻车事故. 一个一直以"颜值主播" ...

  4. iOS教程之BUG终结者-欧阳坚-专题视频课程

    iOS教程之BUG终结者-5208人已学习 课程介绍         很多学生在学习或者开发过程中,调试程序程序时要么无从下手要么还停留在NSLog和printf函数的打印中.通过本视频教程会让你对程 ...

  5. 一款颠覆认知的商务邮箱,即将成为职场人手必备的产品!

    我是一个90后的小仙女,专门发掘各行业种草的好产品.大家平时用什么办公软件最多呢?Office.wps.电子邮箱.ps-本期介绍一款超有辨识度的商务邮箱产品,预测2021年绝对很火! 先来介绍下它的外 ...

  6. 颠覆认知——Redis会遇到的15个「坑」,你踩过几个?

    阅读本文大约需要 20 分钟. 大家好,我是 Kaito. 这篇文章,我想和你聊一聊在使用 Redis 时,可能会踩到的「坑」. 如果你在使用 Redis 时,也遇到过以下这些「诡异」的场景,那很大概 ...

  7. 清华大学张亚勤对话朱民:颠覆认知的AI时代及产业机遇

    来源:财经ThinkTank 4月28日,清华大学智能产业研究院院长.中国工程院外籍院士张亚勤与清华大学国家金融研究院院长.著名经济学家朱民进行对话. 张亚勤表示,对于ChatGPT横空出世,自己有三 ...

  8. 张亚勤对话朱民:颠覆认知的AI时代及产业机遇

    来源:财经ThinkTank 4月28日,清华大学智能产业研究院院长.中国工程院外籍院士张亚勤与清华大学国家金融研究院院长.著名经济学家朱民进行对话. 张亚勤表示,对于ChatGPT横空出世,自己有三 ...

  9. 懂数学的程序员能有多吃香?这是我听过最好的答案丨颠覆认知

    懂数学的程序员能有多吃香? 关于这个问题,我想每个程序员心中都有自己的答案. 之前在网上看到一个很有意思的答案说: 我是在做了2年的开发之后,才真正认识到数学对于程序员的重要性,开始系统的学习数学. ...

最新文章

  1. 如何高效读论文?剑桥CS教授亲授“三遍论”:论文最多读三遍,有的放矢,步步深入...
  2. 微信小程序长按事件触发点击事件的BUG处理
  3. html文本长度不一样的对齐,关于html:文本在中间不对齐
  4. 【机器学习基础】数学推导+纯Python实现机器学习算法12:贝叶斯网络
  5. boost::geometry::clear用法的测试程序
  6. Java多线程相关的常用接口
  7. 1台车至少赚1万块!华为卖车,两天订单破3000辆
  8. 外卖小哥到底是一群什么样的人?答案超乎你想象
  9. Silverlight学习笔记四BusyIndicator控件(进度条)
  10. 十大网站压力测试软件-- WEB压力测试工具介绍
  11. 《人工智能:一种现代的方法》总结 第二章
  12. WebLogic部署配置
  13. 《产品经理面试攻略》PART 2:简历
  14. python函数调用:带()和不带()的区别
  15. js pug 代码_Pug模板(一)
  16. autojs声明文件
  17. 通信中的MGF(矩生成函数)
  18. 你的善良必须有点锋芒
  19. 悲催呀,辞职后,竟然找不到工作了
  20. HyperMesh 2D网格划分

热门文章

  1. 记一次失败的菠菜网站渗透测试
  2. vue本地项目实现局域网访问
  3. YOLOv5 PyQt5(一起制作YOLOv5的GUI界面)
  4. SpringBoot+AOP实现动态切换数据源
  5. 往余额宝里存50万,不工作了可以吗,为什么?
  6. HTML5+CSS大作业——明星薛之谦(7页面))带轮播特效
  7. SonarQube介绍
  8. ubuntu清理挖矿病毒
  9. 超超超超超详细的计网课设报告-简单电子邮件客户端的设计与实现
  10. Mybatis处理字段名和属性名不一致的几种方法