petard  

debug调试实现 - printf打印日志

printf 执行一次很费时间,所以需要在调试结束后,把printf去掉

1.设置一个开关/功能裁剪:打开时有printf 关闭没有

使用宏定义设计

#define DEBUG 1


#if (DEBUG == 1)		//在宏定义中if判断------------------------
#define debug_printf()	printf()	//表示DEBUG为1时,有功能

#else 	
#define debug_printf()	//表示DEBUG为0时,给它替换为空

#endif					//if判断结束-----------------------------
2.设置宏参数
#define debug_printf(format, ...)	printf(format, ##__VA_ARGS__)

format 表示参数格式
... 表示可变参数					通过宏##__VA_ARGS__传递可变参数
3.宏自动加\r\n
#define debug_printfln(format, ...)	printf(format "\r\n", ##__VA_ARGS__)

format "\r\n": 字符串【常量】连接	—— c语言中 "ab""c"	= "abc"	[只能拼常量]
4.打印出所在的行数

在宏里面定义添加 (自动生成)

//[文件名:行号] -- 具体的日志信息
//把文件名、行号求出来,用可变参数代替
/*
 *__FILE__:可以输入绝对路径加文件名  - 目前只要文件名
 *使用一个字符串进行查找并输出(strrchr)
 */
//行号的宏:__LINE__
#define __FILE_NAME__	((strtchr(__FILE__, '\\') ? (strtchr(__FILE__, '\\')+ 1 : __FILE__)		//找反斜杠的时候需要用 \ 转义下
#define debug_printfln(format, ...)	printf("[ %20s:%4d ] -- "format "\r\n", __FILE_NAME__, __LINE__, ##__VA_ARGS__)

总结 整体实现:

#include "string.h"


#define DEBUG 1

#if (DEBUG == 1)		
#define __FILE_NAME__	((strtchr(__FILE__, '\\') ? (strtchr(__FILE__, '\\')+ 1 : __FILE__)	

//[文件名:行号] -- 具体的日志信息
#define debug_printf(format, ...)	printf("[ %20s:%4d ] -- " format, __FILE_NAME__, __LINE__, ##__VA_ARGS__)
#define debug_printfln(format, ...)	printf("[ %20s:%4d ] -- " format "\r\n", __FILE_NAME__, __LINE__, ##__VA_ARGS__)

#else 	
#define debug_printf(format, ...)	
#define debug_printfln(format, ...)

#endif	
posted on 2024-07-03 23:32  岌岌无名  阅读(86)  评论(0)    收藏  举报