美文网首页
一次拷贝粘贴引发的崩溃

一次拷贝粘贴引发的崩溃

作者: weiwcn | 来源:发表于2017-05-11 00:47 被阅读0次

       故事要从一个崩溃的Bug说起。某日,W君写好了一个方法提交给同事调用,不久同事反馈,有概率性的出现崩溃。纳尼,崩溃!二话不说,开始了问题排查五万里的路程。

     重现:

       很快找到了重现步骤,经过观察,不是每次操作都会出现崩溃,尤其是第一次操作都不会出现崩溃。而崩溃时Xcode只显示了如下的内存地址错误,没有更具体的原因。

       看起来,像是对某块已经被释放了的内存进行操作导致的。于是,把代码减少到最小的分支,僵尸模式开起来,Instrument跑起来,依然没能获得有帮助的信息。一时间,有点一筹莫展。

     转机:

       因为当天需要发布一个测试版本,所以对崩溃问题做了一个简单的屏蔽处理,当晚由同事进行了日常的版本发布。第二天一早,来到公司,习惯性的拉取最新代码,想继续分析前一天的问题,却怎么都重现不了。通过对比代码,发现了一个低级错误。

     案例:

       如果看到上面图中的这个错误提示,相信即使是刚学习OC的小白,也能知道是什么问题。是的,方法申明了一个返回类型,而在实现中,并没有提供返回值。于是Xcode检测到这一错误的写法,给出了错误提示。

       然而,在应用工厂的壳工程中,pod入了组件的代码后,再出现如上的写法,实际的结果是

       没有报错!编译呢?编译通过。执行呢?第一次总是能正常通过,之后就会出现内存地址错误的崩溃警告了。

     原因分析:

       W君在码着的时候,看到有类似的方法名,就选择了拷贝、粘贴这项我们都快变成本能的动作。或许是太依赖Xcode的检测,导致一个小的代码错误的发生,造成了一个严重的崩溃Bug。目前已知:

       ①单独打开组件的工程项目时,Xcode能实时的检测到文中的代码编写错误。

       ②以错误的代码提交到发布平台时,平台会编译出错,并给出具体错误原因。

       ③在应用工厂的壳工程pod入组件代码后不会实时检测到错误,编译能正常通过。(至于为什么没有报错,我不得而知。如果有应用工厂的开发童鞋,或是其他的小伙伴知道原因的,请告诉我哈。)

      解决方案:

        因为不清楚有哪些错误是会被忽略的,所以为了避免出现类似的错误,建议大家在平时开发过程中,提交个人代码前,都应该把本地的组件工程项目打开,单独编译,以确认是否正常。(可能有很多小伙伴已经是这样子在做的,要给你们点个赞)

相关文章

  • 一次拷贝粘贴引发的崩溃

    故事要从一个崩溃的Bug说起。某日,W君写好了一个方法提交给同事调用,不久同事反馈,有概率性的出现崩溃。纳尼...

  • vim学习 06——粘贴拷贝替换修改

    vim学习 06——粘贴拷贝替换修改 使用 p 命令可以将最后一次删除的内容粘贴到光标之后。(大写的 P 则是粘贴...

  • 最全Mac快捷键一览

    剪切、拷贝、粘贴和其他常用快捷键 Command-X:剪切 Command-C:拷贝 Command-V:粘贴 C...

  • webstrom常用快捷键整理

    拷贝当前打开的文件路径 拷贝当前光标所在位置的索引 粘贴历史记录(可以从拷贝的记录中选择要粘贴的代码,不用多次复制...

  • VIM常用快捷键

    插入模式: 光标移动: 查找/搜索 拷贝/粘贴 删除

  • iOS模块化:基础框架的创建

    现在大家都在推进模块化,每次粘贴拷贝烦了,我也搞个模块化,因为公司要新起项目,我想我不能每一次都来粘贴一次这么多的...

  • iOS模块化:基础框架的创建

    现在大家都在推进模块化,每次粘贴拷贝烦了,我也搞个模块化,因为公司要新起项目,我想我不能每一次都来粘贴一次这么多的...

  • Mac OS键盘常用快捷键

    常用快捷键 剪切、拷贝和粘贴您可以在大多数 app 中使用这些快捷键来剪切、拷贝或粘贴选中的项目。其中包括文本、图...

  • 解决Mac和iOS模拟器间拷贝粘贴的问题

    在开发过程中经常需要将Mac OS中拷贝的内容粘贴到iOS模拟器上面,或者将iOS模拟器上拷贝的内容粘贴到Mac ...

  • Netbeans拷贝粘贴bug

    Netbeans有一个十多年都没有修改好的bug:如果你在IDE中拷贝了一些内容,并且进行了粘贴,那么如果你从ID...

网友评论

      本文标题:一次拷贝粘贴引发的崩溃

      本文链接:https://www.haomeiwen.com/subject/expntxtx.html