博客專欄

        EEPW首頁 > 博客 > 推薦一個實用的嵌入式日志開源項目 dbuglib

        推薦一個實用的嵌入式日志開源項目 dbuglib

        發布人:xiaomaidashu 時間:2024-06-07 來源:工程師 發布文章
        嵌入式開發過程中,調試是必不可少的一個環節。怎樣調試才能快速定位代碼的問題呢?方法有很多,今天給大家分享一款精小調試支持庫: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_WAGNGG_ERROR兩個級別的日志記錄,其他的記錄級別較低將不被顯示 示例2:配置為G_NONE級別將禁用日志記錄功能

        定義日志記錄樣式

        ulog.h文件中定義了LOG_FUN宏,用戶可以對其修改來改變日志的打印樣式

        // 定義打印樣式
        #define LOG_FUN(LEVESTR,format, ...)      
           LOG_PRINTF("["LEVESTR"] <"__FILE__": %d"">: " format "rn",__LINE__,##__VA_ARGS__)
        使用方式
            ASSERT_MSG(, );
            uLOG(G_DEBUG,,);
            uLOG_MEM(G_DEBUG, randbuff, , ,);

        打印數據如下:

        [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__)


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: 嵌入式

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 安徽省| 开封县| 通化市| 张家界市| 阿城市| 沧源| 呼玛县| 田林县| 西乡县| 普陀区| 淮阳县| 宜兰市| 彰化县| 房山区| 金华市| 九江市| 娄底市| 烟台市| 云霄县| 霍山县| 新晃| 宕昌县| 奉节县| 监利县| 白山市| 凤翔县| 彭山县| 乌审旗| 中卫市| 黄梅县| 阿坝| 华容县| 同心县| 瑞安市| 衡南县| 左贡县| 昌江| 哈巴河县| 调兵山市| 东莞市| 恩施市|