首页 > 其他分享 >debug调试实现 - printf打印日志

debug调试实现 - printf打印日志

时间:2024-07-03 23:43:24浏览次数:17  
标签:__ format FILE printf debug 日志 define

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	

标签:__,format,FILE,printf,debug,日志,define
From: https://www.cnblogs.com/petard/p/18282756

相关文章

  • [debug]解决cmake编译报错:can not be used when making a PIE object:recompile with -
    问题描述最近在跟施磊老师的高性能服务器项目,使用make命令后一直报错以下问题解决方法报错一大堆recompilewith-fPIC,多半是链接静态库是出错了。根据网上经验,在CmakeLists文件中加入-no-pie,但是两种方法进行尝试后都没有效果。#第一种方法add_compile_options(-fPIC)#......
  • Moretl 自动化设备日志工具 1.1.0.3发布
    永久免费:前往Gitee最新版本更新内容Winform全部切换到.NetFramework4.0.更符合大部分的自动化设备.Web提供.NetFramework4.0的运行时环境安装包Web打开时,若当前IP为设备,直接显示设备信息介绍用途:定时全量或增量采集工控机,办公电脑文件以及日志.(SCADA,Io......
  • springboot使用注解方式打印方法日志
    springboot使用注解方式打印方法日志,可以很方便的打印日志,通用性很强。耦合很低,很好。作为程序员的我不废话,咱们直接上代码先创建个注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceShowLog{/***日志描......
  • Linux文件与日志
    目录1.Linux文件系统1.1inode号1.2EXT类型文件恢复1.3xfs类型文件备份和恢复2.日志分析2.1日志类型2.2日志配置文件2.3日志分析的重要性在Linux系统中,文件和日志是管理和维护系统运行所不可或缺的。理解它们的工作原理和如何有效地管理和分析是每个系统管理......
  • 5% 消耗,6 倍性能:揭秘新一代 iLogtail SPL 日志处理引擎与 Logstash 的 PK
    作者:阿柄引言在当今数据驱动的时代,日志收集和处理工具对于保障系统稳定性和优化运维效率至关重要。随着企业数据量的不断增加和系统架构的日益复杂,传统日志处理工具面临着性能、灵活性和易用性等多方面的挑战。Logstash作为一款广受欢迎的开源日志收集与处理工具,早已广泛应用于......
  • Linux:文件系统与日志分析
    一、block与inode1.1、概述文件是存储在硬盘上的,硬盘的最小存储单位叫做“扇区”(sector),每个扇区存储512字节。一般连续八个扇区组成一个"块”(block),一个块是4K大小,是文件存取的最小单位。文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元......
  • mysql审计日志-ProxySQL
    MySQL审计概述:出于对数据安全的考虑,很多公司要求对MySQL的操作进行审计,这就要求我们对所有MySQL的操作都进行记录,并且相关信息要齐全(账号,时间,语句等)。 1、general_log:这样虽然可以记录所有的操作日志,但很遗憾,缺少账号等必要信息,而且IO消耗非常大。2、init-connect:这个其实就......
  • Linux统计日志中有多少个不同的IP登录
    题目解析知识点:1、awk-F'''{print$3}'指定空格是分隔符进行分割,取第三个。(不指定默认分隔符也是空格)2、uniq-c(uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。参数-c:进行计数)3、wc-l行......
  • opencascade AIS_InteractiveContext源码学习7 debug visualization
    AIS_InteractiveContext前言交互上下文(InteractiveContext)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行修改。如果交互对象尚未加载到交互上下文中,您才......
  • NetCore的全局日志记录
    Http进来的数据和出去的数据都记录在log中publicclassHttpLoggingMiddleware{privatereadonlyRequestDelegate_next;privatereadonlyILogger<HttpLoggingMiddleware>_logger;publicHttpLoggingMiddleware(RequestDelegatenext,ILogger<HttpLoggingM......