0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分享一款精小调试支持库:dbuglib

嵌入式与Linux那些事 来源:嵌入式与Linux那些事 2023-04-17 14:01 次阅读

嵌入式开发过程中,调试是必不可少的一个环节。怎样调试才能快速定位代码的问题呢?方法有很多,今天给大家分享一款精小调试支持库: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 "
",__LINE__,##__VA_ARGS__)

使用方式

    ASSERT_MSG(0, "test");
    uLOG(G_DEBUG,"error:%d",123);
    uLOG_MEM(G_DEBUG, randbuff, 125, "error:%d",586);

打印数据如下:

[G_DEBUG] : error:123
[G_DEBUG] : 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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5092

    文章

    19176

    浏览量

    307588
  • 调试
    +关注

    关注

    7

    文章

    589

    浏览量

    34054
  • 代码
    +关注

    关注

    30

    文章

    4823

    浏览量

    69023
  • 上位机
    +关注

    关注

    27

    文章

    945

    浏览量

    54992
  • 日志
    +关注

    关注

    0

    文章

    138

    浏览量

    10675

原文标题:分享一款精小调试支持库:dbuglib

文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    一款基于帧捕捉的开源图形调试器应用设计

    支持,并且也支持 PVRTC压缩格式。 RenderDoC是什么? RenderDoc是一款基于帧捕捉的开源图形调试器,它遵从MIT协议,涵盖了
    的头像 发表于 04-03 09:13 8339次阅读
    <b class='flag-5'>一款</b>基于帧捕捉的开源图形<b class='flag-5'>调试</b>器应用设计

    一款可以显示曲线的WIFI调试助手

    一款可以显示曲线的WIFI调试助手
    发表于 08-26 16:34

    一款支持Lua编程的RTOS

    单片机开源项目开源逆变器wolfBoot 开源的安全启动bootloaderOpenBLT 开源的bootloaderRTOSLua-RTOS-ESP32是一款支持Lua编程的RTOS,目前支持ESP32,ESP8266和PIC
    发表于 08-06 07:20

    一款基于Java实现的小巧而强大的关系型数据

    H2 是一款基于 Java 实现的小巧而强大的关系型数据支持嵌入式、客户端/服务器以及混合部署模式。H2 数据适合嵌入小型应用程序、元数据管理、快速应用开发和测试、内存数据
    发表于 10-27 06:12

    用最新LL开发一款IOT产品记录

    最近使用STm32G031K6做一款IOT产品,选择了用最新LL进行开发,因为知其那对LL了解很少,所以开始的时候踩了很多坑,为防以后继续踩坑,现在做个记录。GPIO初始化:vo
    发表于 01-26 07:39

    一款好用的串口调试软件ComMonitor

    电子发烧友网站提供《一款好用的串口调试软件ComMonitor.exe》资料免费下载
    发表于 07-09 11:19 22次下载

    NetAssist_一款较为方便的TCP/UPD调试助手

    一款较为方便的TCP/UPD调试助手,能够后顺利进行TCP/UDP协议的调试以及数据的传送。
    发表于 02-22 18:12 51次下载

    一款支持LORA-4G的智慧盒子

    一款支持LORA-4G的智慧盒子
    发表于 05-08 10:21 26次下载

    一款超级好用的数据客户端工具

    作者:atzuge 链接:https://www.cnblogs.com/zuge/p/7397255.html 最近被同事案例了一款数据库客户端工具:DataGrip,大爱! 其实,这个标题的话
    的头像 发表于 08-25 16:03 2511次阅读

    H2:一款基于 Java 的嵌入式关系型数据

    H2 是一款基于 Java 实现的小巧而强大的关系型数据支持嵌入式、客户端/服务器以及混合部署模式。H2 数据适合嵌入小型应用程序、元数据管理、快速应用开发和测试、内存数据
    发表于 10-20 19:06 1次下载
    H2:<b class='flag-5'>一款</b>基于 Java 的嵌入式关系型数据<b class='flag-5'>库</b>

    一款支持Sparkplug协议的MQTT网关

    一款支持Sparkplug协议的物联网网关
    发表于 01-25 10:49 968次阅读
    <b class='flag-5'>一款</b><b class='flag-5'>支持</b>Sparkplug协议的MQTT网关

    一款支持多种不同配置的banime40键盘

    电子发烧友网站提供《一款支持多种不同配置的banime40键盘.zip》资料免费下载
    发表于 07-11 14:25 0次下载
    <b class='flag-5'>一款</b><b class='flag-5'>支持</b>多种不同配置的banime40键盘

    一款支持WiFi的体重秤

    电子发烧友网站提供《一款支持WiFi的体重秤.zip》资料免费下载
    发表于 02-08 09:43 1次下载
    <b class='flag-5'>一款</b><b class='flag-5'>支持</b>WiFi的体重秤

    一款专业且全面的嵌入式开发调试工具

    不知道大家平时做嵌入式开发时用调试工具进行调试,今天给大家分享一款专业且全面的嵌入式调试工具集:Micro-Lab。
    的头像 发表于 04-15 14:10 1253次阅读

    一款数据库自动化提权工具

    一款用Go语言编写的数据自动化提权工具,支持Mysql、MSSQL、Postgresql、Oracle、Redis数据提权、命令执行、爆破以及ssh连接等等功能。
    的头像 发表于 07-19 14:57 753次阅读
    <b class='flag-5'>一款数据库</b>自动化提权工具