- 一. 简介
- 二. 项目应用
- 三. 测试
给大家分享一下嵌入式项目中的调试,有的是printf打印,有的是log日志的记录,相信大家用的比较多,虽然有gdb的调试,但是简单的打印对我们了解整个软件的运行还是很有帮助的。
二. 项目应用- 条件编译的打印可显示打印的文件函数以及第几行,就可以很快定位。调试完成后可直接屏蔽宏定义来关闭调试,打印也是会占有资源的
//条件编译实现日志打印 注释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
- 再就是不同类型的打印,想提示错误警告等等,打印可显示出不同的颜色更加的直观
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]%s 33[0m", buff); puts(buff_log); //syslog(LOG_INFO, "%s", buff); break; case LOG_WARNING: sprintf(buff_log, " 33[0;33m[waring]%s 33[0m", buff); puts(buff_log); //syslog(LOG_WARNING, "%s", buff); break; case LOG_ERR: sprintf(buff_log, " 33[0;31m[error]%s 33[0m", buff); puts(buff_log); //syslog(LOG_ERR, "%s", buff); break; case LOG_DEBUG: sprintf(buff_log, " 33[0;31m[error]%s 33[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 文件打印



