众里寻他千百度,蓦然回首他在灯火阑珊处!
即使有10多年的老手,有时候BUG也就悄悄地来了。挥一挥衣袖,就是不悄悄地走。灯火阑珊的时候才找到。
早上在一个没有装极限位的运动平台,调试一段代码,第一个循环体,死活都会进去。明明已经满足退出条件了。
一开始还以为内存被其他线程破坏了,定位无果。debug的时候发现条件的确是false的。为什么还进入花括号呢?
浪费20分钟排查问题,结果突然发现角落里的";",定位到原因。
while(条件)后面多出了个分号。导致一个循环体代码在“{”前就已经结束。
此时如果条件=false,则该语句等于什么都没有做。直接进入到后面的花括号代码。
如果条件=true;则成了死循环;无法到达“{”后面的代码。
-------------------------------------------------
对于此等问题;除了人为细心点,另外一个是可以使用Splint等静态代码分析工具。