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

作者:鱼鹰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. qt mysql now()_Qt + mysql 運用 (項目一)
  2. PHP特级课视频教程_第二十八集 PHP搜索代码测试_李强强
  3. mysql 安装卸载_MySQL(一)——安装、卸载以及基本操作
  4. 学习_HTML5_day2
  5. L3-020 至多删三个字符 [DP]
  6. elasticsearch查询文档数量
  7. POJ1067 取石子游戏 跪跪跪,很好的博弈论
  8. matlab做信号实验需要安装那些模块_无人机基于Matlab/Simulink的模型开发(连载一)...
  9. Oracle SQL 精妙SQL语句讲解
  10. uni-app 网络请求
  11. 海豚蓝牙ASIO驱动程序使用说明
  12. android登陆界面保存账号密码附带源码
  13. unity中世界坐标与局部坐标
  14. 西安、武汉、成都、南京、杭州、苏州和广州,这些城市都有哪些互联网公司?一文全知道!...
  15. 【mirror】国内镜像站,没事翻一翻
  16. <script>标签通过src属性调用js文件
  17. jsp牛刀小试之在线报名系统
  18. 类Loopy是公共的, 应在名为 Loopy.java 的文件中声明
  19. Spring MVC : HandlerMappingIntrospector
  20. 3.9使用ValidationSummary控件

热门文章

  1. 蓝桥杯 ADV_302 秘密行动
  2. ASP.NET项目发布网站具体步骤
  3. 最新iBATIS的代码发生器Ibator插件安装及使用
  4. 中国十大科研机构排名
  5. linux testlink 安装,Linux下testlink安装
  6. MVC,WebAPi,WebService区别
  7. JavaWeb学习总结(二)JDBC
  8. matlab对话框设计,MATLAB程序设计教程(11)——MATLAB图形用户界面设计
  9. C语言之构造类型细讲
  10. 最新美团网数据抓取实战。