分享一款精小調試支持庫:dbuglib
嵌入式開發過程中,調試是必不可少的一個環節。怎樣調試才能快速定位代碼的問題呢?方法有很多,今天給大家分享一款精小調試支持庫:dbuglib.
概述
ulog
日誌記錄庫是一個精小的靜態日誌記錄庫。內部很多功能均由宏定義來實現。用戶可以修改日誌的級別用於過濾特定級別的日誌。
文件
-
ulog.h:定義了各種日誌記錄級別和日誌記錄宏
-
ulog.c:提供了內存打印等接口函數
-
ASSERT.h:提供了用戶可定義的斷言宏支持
-
VS 文件夾:VC 上位機測試示例
-
MDK 文件夾:MDK 下位機測試示例
日誌級別
ulog
支持 5 種日誌記錄級別,可在ulog.h
文件中修改LOG_CFG_LEVE
宏定義來定義日誌的記錄級別。
-
G_DEBUG:調試日誌級別,用來記錄最詳細的調試信息和執行步驟
-
G_TRACE:跟蹤日誌級別,用來記錄重要的跟蹤信息
-
G_WARNG:警告日誌級別,用來記錄一些警告信息
-
G_ERROR:錯誤日誌級別,用來記錄嚴重的錯誤信息
-
G_NONE:不做任何日誌記錄
示例 1:將
LOG_CFG_LEVE
配置爲G_WARNG
級別,則只會顯示G_WAGNG
和G_ERROR
兩個級別的日誌記錄,其他的記錄級別較低將不被顯示 示例 2:配置爲G_NONE
級別將禁用日誌記錄功能
定義日誌記錄樣式
在ulog.h
文件中定義了LOG_FUN
宏,用戶可以對其修改來改變日誌的打印樣式
// 定義打印樣式
#define LOG_FUN(LEVESTR,format, ...) \
LOG_PRINTF("["LEVESTR"] <"__FILE__": %d"">: " format "\r\n",__LINE__,##__VA_ARGS__)
使用方式
ASSERT_MSG(0, "test");
uLOG(G_DEBUG,"error:%d",123);
uLOG_MEM(G_DEBUG, randbuff, 125, "error:%d",586);
打印數據如下:
[G_DEBUG] <main.c: 16>: error:123
[G_DEBUG] <main.c: 17>: error:586
00000000: 29 23 BE 84 E1 6C D6 AE 52 90 49 F1 F1 BB E9 EB )#...l..R.I.....
00000010: B3 A6 DB 3C 87 0C 3E 99 24 5E 0D 1C 06 B7 47 DE ...<..>.$^....G.
00000020: B3 12 4D C8 43 BB 8B A6 1F 03 5A 7D 09 38 25 1F ..M.C.....Z}.8%.
00000030: 5D D4 CB FC 96 F5 45 3B 13 0D 89 0A 1C DB AE 32 ].....E;.......2
00000040: 20 9A 50 EE 40 78 36 FD 12 49 32 F6 9E 7D 49 DC .P.@x6..I2..}I.
00000050: AD 4F 14 F2 44 40 66 D0 6B C4 30 B7 32 3B A1 22 .O..D@f.k.0.2;."
00000060: F6 22 91 9D E1 8B 1F DA B0 CA 99 02 B9 72 9D 49 ."...........r.I
00000070: 2C 80 7E C5 99 D5 E9 80 B2 EA C9 CC 53 ,.~.........S
以上爲程序的使用示例,說明如下:
-
uLOG:指定日誌級別和相應的字符串,其支持 printf 類似的轉移修飾符
-
uLOG_MEM:可打印指定的內存數據,同樣需要指定日誌級別,
-
ASSERT: 該宏當參數爲假時會停止程序,並打印顯示當前導致斷言的文件和行號
-
ASSERT_MSG:與
ASSERT
相同,只不過多了個字符串參數,可以顯示一些信息。
移植
該庫編寫時使用了一些 C99 特性,所以編譯器必須支持 C99 標準。已經在 VS2015 和 MDK5.0 中測試,均可正常工作。移植時必須定義LOG_PRINTF
宏到實際的打印函數,還必須定義LOG_PUT_CHAR
宏到實際的字符輸出函數:
// 字符輸出函數
#define LOG_PUT_CHAR(C) putchar(C)
// 日誌記錄接口
#define LOG_PRINTF(format, ...) printf(format, ##__VA_ARGS__)
開源地址:
https://gitee.com/git-lib/dbugLib-Prj
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/B93AV431wMJf7dmvWe0d8A