您现在的位置:新闻首页>快讯

览域免窿赃到底什么情况?

2023-04-14编辑:admin(来源:原创/投稿/转载)


  公司有个项目,旧的负责人辞职了,代码谁也看不懂,但是偏偏项目出问题了!这个项目有个功能需要在软件开启的时候,同时打开两个设备,结果就一个设备被打开了,另外一个设备没有被打开。于是这个项目的修复工作,几经流转,谁也解决不掉,最终到了我手里。

  我拿到项目以后,看了下代码,虽然大部分逻辑我也看不太懂,但是我扫了一眼代码,立马就看出了问题。代码部分是使用for循环对设备进行初始化以后调用打开设备的函数。但是,根据现有代码的逻辑显示,当打开第一个设备以后,for循环就直接break(跳出)掉了!

  我之所以觉得这里有问题,是因为既然for循环的第一个循环注定要被跳出,那么for循环的意义在哪里?所以,这段for循环代码如果不是当初写的人写得有问题的话,那么很可能就是这个break写得比较蹊跷!

  在for循环被break之前,有一个打开设备是否成功的判断语句,这个判断语句的if语句没有使用花括号“{}”包着,那么按照语言的语法特性,在if语句后面没有花括号包着的时候,只有if后面一行代码或者下面的一行代码会被认为是if语句里面的代码。有没有可能,有人误将本来应该在if语句里面才会执行到的break,不小心放到了if语句之外执行呢?

  于是,我就把我的想法告诉了项目小组的众人。他们最开始还不相信,觉得这个项目以前都好好的,虽然代码看不太懂,可他们觉得事情不应该那么简单。

  我的猜想是这个if语句本来的作用是在第一个设备打开失败以后,直接跳出循环的。因为,我们的设备是需要同时打开才的,任何一个设备打开失败,另外一个设备都不能正常运行,所以,我的猜想是比较合理的!

  但是,这个if语句由于没有使用花括号“{}”,所以只有if语句之后的一行代码是会被if语句所执行到的。但不知什么原因,后来有人在break前面加了一个日志函数,导致break变成了第二行,于是for循环只执行一次就终止了!

  因为旧的负责人最后提交代码到SVN以后,之后代码的流转方式都是打包,因此是谁加的日志导致了这个问题,现在也查不出来了。

  往往有时候,越难找的问题,其实就越简单。之所以在我之前他们都没找到问题,一来是代码谁都看不懂,二来是他们不相信问题就那么简单!

本文地址:http://www.zibocpa.cn/qichekuaixun/2023/lymlzddsmqk__53458.html


  • 本网转载的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请联系我们进行修改或删除。