log调试利器------__TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__搞起
来源:互联网 发布:linux命令 退出 编辑:程序博客网 时间:2024/06/05 04:22
来来来, 一起写个比printf更详细的log api接口:
#include <iostream>#include <string>#include <vector>using namespace std;#define DEBUG_LOG(...) debug_log("DEBUG", __TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)void debug_log(const char *logLevel,const char *time,const char *file, const char *func, const int iLine, const char *format ,...){#include <stdarg.h>static char output[10240]={0}; va_list arglst; va_start(arglst,format); vsnprintf(output,sizeof(output),format, arglst); printf("[%s][%s][%s][%s][%d]:%s\n",time, logLevel, file, func, iLine, output); va_end(arglst);}int main(){DEBUG_LOG("%s, ranking NO.%d", "You are so smart", 1);return 0;}结果:
taoge@localhost Desktop> g++ test.cpp && ./a.out [08:27:50][DEBUG][test.cpp][main][30]:You are so smart, ranking NO.1
有很多时候, 如上方法还是不太方便, 无法打印到终端, 那怎么办呢? 我们前面已经说过了, 用文件搞起(说明一下:如下频繁打开文件, 影响性能, 但程序主要是为了示意,在自己进行调试时, 可用就行):
#include <iostream>#include <string>#include <vector>using namespace std;#define DEBUG_LOG(...) debug_log("DEBUG", __TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)void debug_log(const char *logLevel,const char *time,const char *file, const char *func, const int iLine, const char *format ,...){#include <stdarg.h>static char output[10240]={0}; va_list arglst; va_start(arglst,format); vsnprintf(output,sizeof(output),format, arglst);// 此处有频繁打开关闭文件哦FILE *fp = fopen("/data/home/xxx/log.txt", "a+"); // 不检查fp, core了才好呢 fprintf(fp, "[%s][%s][%s][%s][%d]:%s\n",time, logLevel, file, func, iLine, output);fclose(fp);va_end(arglst);}int main(){DEBUG_LOG("%s, ranking NO.%d", "You are so smart", 1);return 0;}结果, log确实打印到文件了。 在比较大型的工程中, 当方面工程中的log函数不起作用的时候, 我经常这么搞, 用自己的log api来调试。
最后说一下, 文件路径要对且有权限哦, 否则就会有core.
1 0
- log调试利器------__TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__搞起
- C程序调试利器。__DATE__ ,__TIME__,__FILE__,__LINE__,__FUNCTION__
- __FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__调试宏
- C++的__VA_ARGS__、__FILE__、__FUNCTION__、__LINE__、__DATE__、__TIME__宏
- __FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__
- __DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__
- __FILE__,__LINE__,__DATE__,__TIME__, __FUNCTION__
- __FILE__,__LINE__,__DATE__,__TIME__,__FUNCTION__
- __FILE__,__LINE__,__DATE__,__TIME__, __FUNCTION__
- 调试常用的 __FILE__, __FUNCTION__, __LINE__ __DATE__, __TIME__
- Linux几个调试宏__FUNCTION__ __TIME__ __LINE__ __FILE__ __DATA__
- Linux几个调试宏__FUNCTION__ __TIME__ __LINE__ __FILE__ __DATA__
- __DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__ c 程序调试信息
- Linux几个调试宏__FUNCTION__ __TIME__ __LINE__ __FILE__ __DATA__
- Linux几个调试宏__FUNCTION__, __TIME__, __LINE__, __FILE__ , __DATA__ 使用
- __DATE__,__FILE__,__LINE__,__TIME__,__FUNCTION__宏定义
- 可变参数的宏__VA_ARGS__ 及调试常用宏 __FILE__ 、__LINE__、__FUNCTION__
- 宏的使用__VA_ARGS__, __FILE__, __FUNCTION__,__TIME__等
- Coursera Machine Learning 第九周 quiz Anomaly Detection
- 概率分布的转换
- [排序]
- WP Super Cache设置教程
- handler中传递JSON数据的写法
- log调试利器------__TIME__, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__搞起
- Android自定义卫星弧度菜单
- 搜索算法——加一乘二平方
- javaScript之——数据类型
- 数据结构-栈
- WordPress 伪静态规则(IIS/Apache/Nginx)
- mysql5.7.16安装或配置(啊呀,随便了.zip的那个)
- 搜索算法——六数码
- 树莓派入门--系统安装、电脑连接