定律1:最难定位的问题要么是最疑难的问题,要么是最低级的问题,这两种问题都有一个共同特征,就是让你意想不到。
举一个例子,一次代码编译不过,报函数没有定义,开始怀疑是类没有“;”结束符,然后怀疑有没有匹配的“{”,折腾了好久,最后才发现是开头的“#ifndef”定义的符号与别的文件重复了,导致整个文件没有生效,报函数未定义错误,都是Ctrl C、Ctrl V惹的祸啊!
低级问题要靠良好的习惯和必要的排查手段来避免。比如写代码时,敲{ 的时候,自发地把} 也敲出来,包括换行缩进。再如写完代码之后做一下pc-lint,就可以避免函数结束没有return,有的case分支没有break等错误,而这样的错误我经常看到有同事使用gdb进行跟踪定位。
定律2:当非常奇怪的问题发生时,通常是犯了低级错误。
一次执行mv时报命令找不到,郁闷死了,“shit,操作系统被破坏了,连mv都找不到了”,过了一会才发现,原来自己正在windows下的cmd窗口中操作。