最近程式出現了bug,可是還真是奇怪,明明就是每支副程式都測試過,可是合在一起就是有問題
我以前一直沒有用ICD3 的debugger的功能,原來這個這麼好用!
設定如下,先選好debugger工具,因為我是ICD3,所以就選ICD3嚕
compiler完後,將程式燒進ICD3,對,不是燒進MCU,因為拔掉ICD3,MCU是沒有功能的。
設定好欲觀看的變數。
使用watch,觀看變數
執行
當程式執行到斷點時,即會停止,將變數資料show在watch視窗裡。
用ICD3 debugger的好處是因為,有些功能是只有硬體debugger才有辦法的,像如果我要線上除錯ADC是否正確,這個功能就很重要,因為我的程式出錯是因為和EEPROM有關系,所以就更需要這樣的功能來幫助除錯了!
那麼我的bug到底是什麼?
哈哈!
其實就是自己的觀念不正確嚕
誰知道這段程式結束後,var2的答案是什麼嗎?
如果答對了,就代表觀念正確,如果答錯了,就有可能和我一樣,觀念錯誤!
void test(void){
int var1;
int var2;
if (var1==0) var2=0;
else if (var1==1) var2=1;
else if (var1==2) var2=2;
else var2=55;
}
答案是有可能var2 是0、1、2,也有可能是55,都有可能。
我一直以為在區域變數裡面宣告的變數,初值會是0。
結果,利用debugger工具來觀看變數時,初值竟然不是0。
悶了@@
後來請教老師和學長的結果是:區域變數的初值本來就是不可掌握的,所以最好的方式都是設一下初值會比較好。
而為什麼之前在測試程式的時後並沒有出錯,是因為我習慣把副程式丟在一個程式比較精簡的地方去做測試,等到正確後,才會把這支副程式整合在一起。可能是因為這樣的關系,才讓這個bug現在才出現。
不過陰錯陽差的學到1個debugger 工具和 觀念,這樣也是不錯。