每一个程序员的成长老是伴随着各类各样的BUG。在最初阶段的语法bug,到后面逻辑繁杂的业务bug,此类逻辑bug若是有迹可查还好,最怕就是它无迹可查,又极难重现。本文根据做者、做者的狐朋狗友一干人等开发经验,介绍一些bug的快速定位与快速修复。本文主要以PHP为主,由于做者更多的时间仍是在与最好的语音打交道。本文每一个阶段都将分为三部分,分别是介绍、示例、与解决。程序员
初级语法BUG,就是编写代码时候,遇到编译器报错。例如PHP的换行没有加分号,js的无效对象的值得引用。此类的bug是最容易发现而且修复的,毕竟编译器已经将bug出现的缘由及行数都送到脸上了,这都不会那就须要加紧学习了。下面介绍一些常见实例。sql
常常会出现的类型错误数据库
$t = '1562996654a'; echo date('Y-m-d H:i:s', $t);
这种错误的话,只把错误内容读一遍,不懂英文就将错误内容翻译一下,而后对比着行数,就能够解决了。途中的错误信息是A non well formed numeric value encountered
,翻译过来就是遇到格式不正确的数值
,因此只需把$t进行一次类型转换或者字符过滤。就能够解决掉该错误。json
$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的同时,咱们还须要在本身信用的小本本
上记上一笔,防止之后重复出现,毕竟每个程序员都有一个伟大的梦。若是说各位有什么本身特殊的技巧与经验,欢迎分享!