Linux printf 巨集 除錯技巧

2021-10-10 20:58:33 字數 1953 閱讀 9924

printf除錯是嵌入式除錯的基本手段,而且是非常重要的手段,我認為相比單步除錯更加有用有效,特別是微控制器之後跑系統,單步除錯效率更加低下了,我們在工作遇到bug的時候,我們第一時間就想知道那些該死的日誌有沒有儲存下來,這樣好讓我們程式設計師裝逼一波把問題解決。

printf巨集定義除錯非常重要,有些日誌在開發的時候才需要開啟,發布的時候需要關閉,但是在**上又需要保留下次除錯,所以我們在除錯的時候才開啟除錯巨集定義,而且printf會占用空間,很多晶元的空間非常有限,更應該關閉除錯巨集。

下面就直接進入正題,說一下除錯的技巧

編譯器內建巨集

先介紹幾個編譯器內建的巨集定義,這些巨集定義不僅可以幫助我們完成跨平台的原始碼編寫,靈活使用也可以巧妙地幫我們輸出非常有用的除錯資訊。

ansi c標準中有幾個標準預定義巨集(也是常用的):

__line__:在源**中插入當前源**行號;

__file__:在原始檔中插入當前源檔名;

__date__:在原始檔中插入當前的編譯日期

__time__:在原始檔中插入當前編譯時間;

__stdc__:當要求程式嚴格遵循ansi c標準時該標識被賦值為1;

__cplusplus:當編寫c++程式時該識別符號被定義。

開啟巨集的時候輸出

關閉巨集的時候輸出

輸出如下

date: oct  5 2018,file: /code/main.c, line: 00013: hello world

sandbox> exited with status 0

參考:

// log define

#define gtp_error(fmt,arg...) printk("<> "fmt"\n",##arg)

#if debug_switch

#define gtp_info(fmt,arg...) printk("<> "fmt"\n",##arg)

#define gtp_debug(fmt,arg...) dowhile(0)

#define gtp_debug_array(array, num) do\

}\printk("\n");\

}\}while(0)

#define gtp_debug_func() dowhile(0)

#else

#define gtp_info(fmt,arg...)

#define gtp_debug(fmt,arg...)

#define gtp_debug_array(array, num)

#define gtp_debug_func()

#endif

用於除錯的巨集

在linux程式設計中,gdb是個不錯的除錯工具。但是當檔案數量上百,甚至上千之後,使用gdb除錯就是一場災難。因此在程式中加入合理的列印資訊,能更高效的定位到問題的所在。下面就是定義的巨集。分別是warning,info,error。利用了,file function line 變數。cpp vi...

C 除錯巨集 LINE FILE

date file line funcdname stdc time timestamp 使用方法 printf s d s date line file unicode 使用方法 include define widen2 x l x define widen x widen2 x define ...

ios 巨集定義除錯

nslog遮蔽輸出 使用nslog的乙個風險是 它的執行會占用時間和裝置資源。當我們用simulator時,nslog的資源占用並不引人注意,風險也不會顯示出來。但是如果你寫的是乙個即時戰略遊戲,而你在每乙個action中都加入了nslog 那麼nslog將成為乙個魔鬼。災難的具體表現常常是 你在s...