栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

嵌入式项目调试

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

嵌入式项目调试

文章目录
    • 一. 简介
    • 二. 项目应用
    • 三. 测试

一. 简介

给大家分享一下嵌入式项目中的调试,有的是printf打印,有的是log日志的记录,相信大家用的比较多,虽然有gdb的调试,但是简单的打印对我们了解整个软件的运行还是很有帮助的。

二. 项目应用
  1. 条件编译的打印可显示打印的文件函数以及第几行,就可以很快定位。调试完成后可直接屏蔽宏定义来关闭调试,打印也是会占有资源的
//条件编译实现日志打印 注释define可关闭
#define LOG
#ifdef  LOG
#define LOG_OUTPUT(fmt...) 
    do {
        printf("[%s-%s-%d]: ", __FILE__, _FUNCTION__, __LINE__);
        printf(fmt);
       }while(0)
#else
#define LOG_OUTPUT(fmt...)
#endif
  1. 再就是不同类型的打印,想提示错误警告等等,打印可显示出不同的颜色更加的直观
    debug.h
#ifndef __DEBUG_H__
#define __DEBUG_H__

#include 
#include 
#include 

extern void debug_hex(const char* head_l, unsigned char*date_in, int length_l);
extern void debug(int level, const char *sFormat, ...);

#define LOG_D(format, ...)    debug(LOG_DEBUG, "[%s:%s] "format, __FILE__,__FUNCTION__, ##__VA_ARGS__)
#define LOG_I(format, ...)    debug(LOG_INFO, "[%s:%s] "format, __FILE__,__FUNCTION__, ##__VA_ARGS__)
#define LOG_W(format, ...)    debug(LOG_WARNING, "[%s:%s] "format, __FILE__,__FUNCTION__, ##__VA_ARGS__)
#define LOG_E(format, ...)    debug(LOG_ERR, "[%s:%s] "format, __FILE__,__FUNCTION__, ##__VA_ARGS__)
//16进制打印
#define LOG_HEX               debug_hex

#endif 

debug.c

syslog()函数 void syslog(int priority, const char *fmt, …);
是系统的日志打印,将打印的结果写入到 /var/log/syslog 文件中

#include 
#include 
#include 
#include 

static char buff[1024];
static char buff_log[1024];
void debug(int level, const char *sFormat, ...)
{
    char *p;
    va_list ParamList;

	va_start(ParamList, sFormat);
    memset(buff, '', sizeof(buff));
    vsprintf(buff, sFormat, ParamList);
    va_end(ParamList);

    switch(level)
    {
        case LOG_INFO:
            sprintf(buff_log, "33[0;32m[info]%s33[0m", buff);
            puts(buff_log);
            //syslog(LOG_INFO, "%s", buff);
        break;

        case LOG_WARNING:
            sprintf(buff_log, "33[0;33m[waring]%s33[0m", buff);
            puts(buff_log);
            //syslog(LOG_WARNING, "%s", buff);    
        break;

        case LOG_ERR:
            sprintf(buff_log, "33[0;31m[error]%s33[0m", buff);
            puts(buff_log);
            //syslog(LOG_ERR, "%s", buff);
        break;

        case LOG_DEBUG:
            sprintf(buff_log, "33[0;31m[error]%s33[0m", buff);
            puts(buff_log);
            // syslog(LOG_ERR, "%s", buff);
        break;

        default:
            sprintf(buff_log, "[debug]%s", buff);
            puts(buff_log);
            // syslog(LOG_DEBUG, "%s", buff);
        break;

    }
}


static char buff_hex[1024];
void debug_hex(const char* head_l, unsigned char* date_in, int length_l)
{
    int len = 0;
    memset(buff, '', sizeof(buff));

    sprintf(buff_hex, "33[1;32m[HEX][%d]%s:n[", length_l, head_l);

    len = strlen(buff_hex);

    for (int k = 0; k < length_l; k++)
    {
        sprintf(&buff_hex[len + 3*k], "%02X ", date_in[k]);
    }
    len = strlen(buff_hex);

    sprintf(&buff_hex[len], "]33[0m");

    puts(buff_hex);
    // syslog(LOG_DEBUG, "%s", buff_hex);
} 
三. 测试
#include 
#include "debug.h"

int main()
{
	LOG_D("aaa");
	LOG_I("bbb");
	LOG_W("CCC");
	LOG_E("DDD");
	LOG_HEx("HEX", "1234", 4);
}

/var/log/syslog 文件打印

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/935290.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号