teamvx 2019-11-05
每个程序员的成长总是伴随着各种各样的BUG。在最初阶段的语法bug,到后面逻辑繁杂的业务bug,此类逻辑bug如果有迹可查还好,最怕就是它无迹可查,又极难重现。本文根据作者、作者的狐朋狗友一干人等开发经验,介绍一些bug的快速定位与快速修复。本文主要以PHP为主,因为作者更多的时间还是在与最好的语音打交道。本文每个阶段都将分为三部分,分别是介绍、示例、与解决。
初级语法BUG,就是编写代码时候,遇到编译器报错。例如PHP的换行没有加分号,js的无效对象的值得引用。此类的bug是最容易发现并且修复的,毕竟编译器已经将bug出现的原因及行数都送到脸上了,这都不会那就需要加紧学习了。下面介绍一些常见实例。
经常会出现的类型错误
$t = '1562996654a'; echo date('Y-m-d H:i:s', $t);
这种错误的话,只把错误内容读一遍,不懂英文就将错误内容翻译一下,然后对比着行数,就可以解决了。途中的错误信息是A non well formed numeric value encountered
,翻译过来就是遇到格式不正确的数值
,所以只需把$t进行一次类型转换或者字符过滤。就可以解决掉该错误。
$t = 'aaaaa'; $t = intval($t); if ($t === 0) { throw new Exception("时间戳不允许为0或时间戳类型错误"); } echo date('Y-m-d H:i:s', intval($t));
函数类型错误与函数缺少参数
class Friend { public $name; } function test(Friend $a, $b, $c, $d) { echo $a->name; return $b + $c + $d; } $f = new Friend(); $f->name = 'g'; echo test(null, 1, 'a', '2');
代码中出现的问题有几处,其余几个很普通,有一个需要特别注意的就是null不是对象类型
,必须函数参数默认可以为空才能使用null
,不然会出现错误。callable
同理,
数组下标不存在或对象
class a { } $a = new a(); echo $a->a;
这个类BUG一样的,翻译一下错误内容,找到相应行数,对对象属性或数据下标 用isset
或empty
判断即可。
示例中很多已经解释了。对相应的错误内容与错误行数,进行排查,就可以修复了。
代码在实际运行中,未出现常见的语法问题,但是却在一连串的业务处理后,没有得到相应的结果。例如订单金额计算,最后少了0.1元;拼团抢购,购买成功人数超过库存;微信jssdk验证失败等等。以上能说出的已经是有部分相应解决方案了,毕竟已经碰到了,还有说不出的,没遇到过的BUG有时候即便最熟悉的业务的程序员,也极为头痛。总结而言,就是程序员秃顶的原因所在。
曾今遇到过一个问题,同一套缓存被另外一个人偷偷使用,导致微信accesstoken与ticket互刷,无法使用微信。找BUG找到头皮发麻,最后发现有人和我一起出现这个问题,才解决。在开发程序时候,尤其共用某些配置,一定要团队一些协约好该类配置。
host
与js取host
少一个/
,导致微信校验错误。碰到此类错误,还是多咨询已经经常开发的人为妙。sql update 何如工作以及合理使用事务
,一般奖池更新,需要查出符合条件奖品进行更新中奖者,但是新手会在查的时候是对的,但是更新时候,未设置更新条件,sql update 也是有 where 条件的
.BUG
了,已经是设计缺陷了。然后,两边同时开启事务更是问题,需要对病句进行出,必须要事务,既然是同一套数据库,为何不在一起处理。所以服务拆分时候要小心数据库。业务BUG更多的还是团队沟通与细节,还有经验的不足导致的,更多的情况下,碰见这种问题,不能死钻牛角尖,需要对BUG区域进行逐一排查,一个人思路不清晰,就使用小黄鸭
思路。小黄鸭是什么请自行百度 程序员 小黄鸭
无需多言,要有点自己想法,怼产品就完事。
语言执行顺序
,例如PHP是从上倒下,那么排查也应该是从上倒下,一步一步,根据日志数据,进行合理分析,像类
的话,记住set
与get
还有 __construct
等特殊方法。总的来说,所有的bug更多的还是经验不足,与开发时候考虑不周导致出现的问题。在修复BUG的同时,我们还需要在自己信用的小本本
上记上一笔,防止以后重复出现,毕竟每一个程序员都有一个伟大的梦。
如果说各位有什么自己特殊的技巧与经验,欢迎分享!