首頁>技術>

前言

在我們嵌入式開發中,除錯程式碼的方法有很多。比如使用偵錯程式線上除錯、藉助一些測量儀器、輸出除錯日誌等方式。沒有哪種方法是最好的除錯方法,實際開發中需要根據實際情況藉助不同的方法進行除錯。但是,在一些稍微大點的專案中,輸出除錯日誌卻是比較好的除錯方法。

輸出日誌可以比較隨意,想輸出什麼就輸出什麼,但是也得注意兩個點:一是輸出的日誌儘量整潔明瞭,因為如果日誌稍微多一點,看起來就會很亂,很擾心;二是方便開啟/關閉日誌相關程式碼,程式除錯階段開啟,方便定位問題,程式釋出階段關閉,可節省不必要地資源開銷。

最近在做Linux方面的開發,整天分析日誌,有點體會。順便也寫點日誌筆記分享給大家:

站在巨人的肩膀上

網路上有很多現成的日誌庫,簡單移植一下就可以使用。這裡分享一個常用的日誌庫—— EasyLogger。

碼雲倉庫及介紹地址:

https://gitee.com/Armink/EasyLogger?_from=gitee_search#easylogger

1、EasyLogger介紹

EasyLogger是一款超輕量級(ROM<1.6K, RAM<0.3K)、高效能的C/C++日誌庫,非常適合對資源敏感的軟體專案,例如: IoT產品、可穿戴裝置、智慧家居等等。相比log4c、zlog這些知名的C/C++日誌庫, EasyLogger的功能更加簡單,提供給使用者的介面更少,但上手會很快,更多實用功能支援以外掛形式進行動態擴充套件。

2、EasyLogger特性支援使用者自定義輸出方式(例如:終端、檔案、資料庫、串列埠、485、Flash...);日誌內容可包含級別、時間戳、執行緒資訊、程序資訊等;日誌輸出被設計為執行緒安全的方式,並支援非同步輸出緩衝輸出模式;支援多種作業系統(RT-Thread、UCOS、Linux、Windows...),也支援裸機平臺;日誌支援RAW格式,支援hexdump;支援按標籤級別關鍵詞進行動態過濾;各級別日誌支援不同顏色顯示;擴充套件性強,支援以外掛形式擴充套件新功能。3、EasyLogger的嘗試

該開源專案提供了豐富的demo,有stm32裸機的demo,有RT-Thread的demo、有Windows下的demo、有Linux下的demo。這裡我們跑一下stm32裸機的demo。

進行初始化及一些設定之後就可以呼叫其給我們使用者提供的日誌列印介面log_a、log_e、log_w等來輸出日誌資訊,我們使用日誌庫也主要使用的是這幾個介面,其它輔助功能有興趣的朋友可自行學習使用。

4、EasyLogger的移植、剖析

想要對EasyLogger進行深入學習可查閱專案的readme檔案、原始碼閱讀及如下兩篇文章:

【開源解讀】一款輕量級C日誌庫-EasyLogger

EasyLogger,一款輕量級且高效能的日誌庫

摘選那篇筆記的程式碼:

#define  DEBUG   1  #if DEBUG  #define DBG_PRINTF(fmt, args...)  \  do\  {\    printf("<<File:%s  Line:%d  Function:%s>> ", __FILE__, __LINE__, __FUNCTION__);\    printf(fmt, ##args);\  }while(0)#else  #define DBG_PRINTF(fmt, args...)   #endif

我們拿來修改一下,下面分享兩種簡單的日誌輸出方式:

1、分模組列印

給各個模組加上宏列印開關。在除錯時可以透過宏開關先遮蔽掉沒有問題的模組的日誌資訊,減少日誌地輸出,方便專注於有問題的模組分析。

直接上程式碼吧。。。

編譯、執行:2、分級列印

分級列印是日誌庫裡常用的方式,比如上面的EasyLogger日誌庫的分級列印實現方式:

這也是EasyLogger的核心部分。

我們可以把這一部分抽出來修改一下:

17
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Redis基礎——剖析基礎資料結構及其用法