捉虫记:一种令程序员闻风丧胆的BUG

发表于:2018-1-12 14:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:xu54    来源:简书

  最令程序员毛骨悚然闻风丧胆的BUG就是那种不可重现的bug。这种bug总是在你调试的时候无影无终,而用户使用的时候却又出现。
  有以下两种情况:
  1:)bug时而出现,时而消失,飘忽不定。这种bug以一种概率出现,所以当你企图调试代码找出它时,它又消失了。这种情况是最让人崩溃的!
  2:)bug只在发行版中出现,调试版中却是正常的,但分析bug必须在调试版中。
  以上两种bug几乎可以肯定都是内存照成的,线程同步问题、栈溢出问题都是这两种bug的根源。
  昨天我的app: <6F> 上TestFlight内测,发现这样的bug, 自己运行都是正常的 ,但提交到TF后,下载下来用却有bug?
  这是绘图工具里一个绘制多边形的场景。
  自己开发的时候是这样的:
  但发行版本中,用户使用的情况却是这样的:
  这个bug只存在发行版中,并且多边形如果为正多边形的情况下,bug也消失。因为bug只存在发行版本中,几乎没办法代码调试,只能在几十万行代码中靠猜( 当然猜测的依据是历史所有经验的总结和汇总),然后在猜测的地方加log输出, 经过一天一夜的无水无食物无大小便的努力,找到bug
  自己写的多边形算法里,是先绘制正多边形,然后再做压缩的矩阵。
  问题是用到了trans这个变量的指针,但是trans局部变量的生命周期在if 的大括弧内,也就是说超过if大括弧,trans变量的内存就会被释放,然而,后面的代码中却使用了trans的数据。
  那为什么在debug版本中是正常的呢?
  因为debug版本的局部变量的内存释放,系统并不会说把这部分内存清为0, 只是把它丢弃掉,以后有可能有其他代码使用它,而release版本中,系统会立刻把这部分内存清为0.
  当然修改起来也很简单,就是把tans变量的定义放到if大括弧外面,保持住它的内存不被释放
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号