C语言实现日志封装--能输出调用函数、文件名、行号
来源:互联网 发布:js 仿ios select 编辑:程序博客网 时间:2024/04/30 11:48
在后台程序运行出问题时,详尽的日志是抓错不可缺少的帮手,这里提供一个能自动记录日志触发点文件名、行号、函数名的方法,关键是利用C99新增的预处理标识符__VA_ARGS__
先介绍几个编译器内置的宏定义,这些宏定义不仅可以帮助我们完成跨平台的源码编写,灵活使用也可以巧妙地帮我们输出非常有用的调试信息。
ANSI C标准中有几个标准预定义宏(也是常用的):
__LINE__:在源代码中插入当前源代码行号;
__FILE__:在源文件中插入当前源文件名;
__DATE__:在源文件中插入当前的编译日期
__TIME__:在源文件中插入当前编译时间;
__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
__cplusplus:当编写C++程序时该标识符被定义。
代码:
#define LOG(level, format, ...) / do { / fprintf(stderr, "[%s|%s@%s,%d] " format "/n", / level, __func__, __FILE__, __LINE__, ##__VA_ARGS__ ); / } while (0)int main(){ LOG(LOG_DEBUG, "a=%d", 10); return 0;}运行结果:[DEBUG|main@a.c,17] a=10
限制是format不能是变量,必须是常量字符串,如果要记录一个变量字符串,不能像printf那样printf(s)了,要LOG("DEBUG", "%s", s)。
另外还有一种:
//============================================================================// Name : debug.cpp// Author : boyce// Version : 1.0// Copyright : pku// Description : Hello World in C++, Ansi-style//============================================================================#include <stdio.h>#define __DEBUG__#ifdef __DEBUG__#define DEBUG(format,...) printf("File: "__FILE__", Line: %05d: "format"\n", __LINE__, ##__VA_ARGS__)#else#define DEBUG(format,...)#endifint main(int argc, char **argv) { char str[]="Hello World"; DEBUG("A ha, check me: %s",str); return 0;}
- C语言实现日志封装--能输出调用函数、文件名、行号
- c语言日志封装-输出文件名、函数名、行号
- Swift - 实现日志输出的封装1(显示出调用的文件名、方法、行号)
- c语言输出文件名函数名和行号
- C语言 打印文件名,行号,函数名
- linux下C语言如何得到调用我的函数的文件名和行号
- 程序日志中自动记录所在函数名、文件名、行号,并定向输出到一个日志文件
- C++输出文件名、函数名、行号
- C++显示调用函数和行号文件名
- C语言封装自己的日志函数
- C语言实现简单的日志封装
- 封装一个count函数,能实现如此调用:count(a)(b)(c)(d)(e)
- C/C++语言中如何使用宏打印行号、文件名和函数名
- 封装printf函数,让log可以打印文件名和行号
- C语言--单链表之调用输出函数
- 日志中自动记录所在函数名、文件名、行号
- c#输出文件名、行号、函数名、列号
- 给程序加入能打印文件名、行号、日期的日志信息,并设置debug开关
- 修改mysql用户密码的方法
- 对象树到easyui树实现方式
- Dynamic Performance Tables not accessible 问题解决
- hdoj_2002 计算球体积
- 批量获得oracle存储过程等
- C语言实现日志封装--能输出调用函数、文件名、行号
- Android开发笔记:显示调试信息
- 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面
- Four Steps to Google, Without a Degree
- UVa 270 - Lining Up
- CronTrigger配置格式
- cocos2d-x 菜鸟学习笔记十(计时器-CCScheduler)
- [精通WindowsSocket网络开发-基于VC++实现]第三章——WindowsSockets基础—TCP,UDP程序
- Google眼镜已经安装了Twitter, Facebook, Tumblr 和 Evernote应用