2010年6月5日 星期六

除錯的技巧

常常寫程式都需要除錯


可是當不需要除錯的時候


要把每一行除錯的程式都註解掉(節省code size 和 提升執行速度)


這樣超級麻煩的


我以前常常這樣做


很累,很辛苦


最近學了一招不錯用的debug方式


只要設定define,就讓程式可以原封不動的做調整


 


#include <stdio.h>



typedef  unsigned char u8;



#define DEBUG


void assert_failed(u8* file, int line,int expr);
#ifdef DEBUG
 #define assert_param(expr) ((expr) ? assert_failed((u8 *)__FILE__, __LINE__,(expr)) : (void)0)
 /*******************************************************************************
 * Function Name : assert_failed
 * Description : Reports the name of the source file and the source line number
 * where the assert_param error has occurred.
 * Input : - file: pointer to the source file name
 * - line: assert_param error line source number
 * Output : None
 * Return : None
 *******************************************************************************/
 void assert_failed(u8* file, int line,int expr){
  printf("Wrong parameters value: file %s on line %d\r\n", file, line);
  printf("data: %d\r\n", expr);
 }
#else
 #define assert_param(expr) ((void)0)
#endif/* DEBUG */



int main(void){


 assert_param(66);
 while(1);
}


 


程式只要有定義


#define DEBUG 的話,那麼就會列印資料出來


如果沒有的話,compiler就會呼略這行程式


題外話


上面的這個程式是會有bug的


當assert_param(0) 時,這樣就不會送出0,而是呼略掉這個指令


就留點作業給大家做看看吧


可以利用這樣的想法,規劃自己的debug程式


ps:有效率的管理自己的程式真的非常的重要


 


沒有留言:

張貼留言