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   岌岌无名  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
 
点击右上角即可分享
微信分享提示