C++ 自定义调试信息的输出
qDebug( "[模块名称] 调试信息 File:%s, Line:%d", __FILE__, __LINE__ );
这样的修改比较烦人, 而且一不小心会遗漏某个没改的...
2) __FILE__ 宏在预编译时会替换成当前的源文件名
3) __LINE__宏在预编译时会替换成当前的行号
4) __FUNCTION__宏在预编译时会替换成当前的函数名称
有时,我们想把调试信息输出到屏幕上,而有时则又想把它输出到一个文件中,可参考下面的例子:
#include <string.h>
#define _DEBUG
//开启下面的宏就把调试信息输出到文件,注释即输出到终端
#define DEBUG_TO_FILE
#ifdef DEBUG_TO_FILE
//调试信息输出到以下文件
#define DEBUG_FILE "/tmp/debugmsg"
//调试信息的缓冲长度
#define DEBUG_BUFFER_MAX 4096
//将调试信息输出到文件中
#define printDebugMsg(moduleName, format, ...) {\
char buffer[DEBUG_BUFFER_MAX+1]={0};\
snprintf( buffer, DEBUG_BUFFER_MAX \
, "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ );\
FILE* fd = fopen(DEBUG_FILE, "a");\
if ( fd != NULL ) {\
fwrite( buffer, strlen(buffer), 1, fd );\
fflush( fd );\
fclose( fd );\
}\
}
#else
//将调试信息输出到终端
#define printDebugMsg(moduleName, format, ...) \
printf( "[%s] "format" File:%s, Line:%d\n", moduleName, ##__VA_ARGS__, __FILE__, __LINE__ );
#endif //end for #ifdef DEBUG_TO_FILE
#else
//发行版本,什么也不做
#define printDebugMsg(moduleName, format, ...)
#endif //end for #ifdef _DEBUG
{
int data = 999;
printDebugMsg( "TestProgram", "data = %d", data );
return 0;
}
{
char buffer[DEBUG_BUFFER_MAX_LENGTH + 1]={0};
va_start (arg, format);
vsnprintf(buffer, DEBUG_BUFFER_MAX_LENGTH, format, arg);
va_end (arg);
}
转载于:https://blog.51cto.com/laokaddk/214225
C++ 自定义调试信息的输出相关推荐
- [编程手记小技巧]自定义调试信息宏及gcc技巧
文中所讲的函数,可能是指使用宏定义的"宏函数",也可能是指真正的函数.假设你不会混淆它们,也假设你能理解它们. 许多开源项目代码中都有自定义的调试信息的相关的函数.比如u-boot ...
- 将调试信息同时输出到终端和文件_暨_多参数函数封装
今天写了个类,调试的时候可以将调试语句输出,同时记录到文件中.可以用来记Log,也可以防止终端输出太快来不及看.其中有一个多参数函数(printf和fprintf)的封装问题的例子.记录在此: #if ...
- 巧用可变参数宏、编译器内置宏和printf输出调试信息
前言: 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调 ...
- 利用编译器宏完美的输出调试信息
前言: 我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调 ...
- python打开文件报错无效序列_黑马python入门(4):python基础(序列,异常,操作文件,模块包,日志调试信息)
序列 str声明:test_str="abcedf" 也可以保留字符串里面的格式来 test_str=""" \r\n测试标题 hello world ...
- 一起谈.NET技术,Visual Studio自定义调试窗体两个小技巧
本文翻译:Few Tips on Customizing Debugging Window View in Visual Studio . 使用DebuggerBrowsable特性可以自定义调试窗体 ...
- am335x UART1输入u-boot 调试信息代码修改
AM335x 调试信息UART1输出代码修改 1. 关于pin_mux 的配置 代码修改位置: /board/forlinx/ok335x/mux.c 1 void enable_uart0_pin ...
- C# 打印调试信息到DebugView
1 System.Diagnostics.Trace.WriteLine("hello world"); 2 通过VS直接启动应用程序时,调试信息会输出到VS输出窗口,不会输出 ...
- php语法中可以输出调试信息,怎么优雅的输出PHP调试信息
如何优雅的输出PHP调试信息 经常因为出现紧急bug而被老板骂的同事,为了更快的修复而直接利用线上的错误环境现场debug,并直接在页面上echo和dump.结果被老板发现了,又是一通臭骂.那么有没有 ...
最新文章
- 基于Springboot实现作业管理系统
- SpringSide 3 中的 Struts 2
- OpenSceneGraph 笔记–如何导出三角形数据
- Java基础——synchronized
- DBL_EPSILON和FLT_EPSILON的用法
- Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解(1ni)
- 关于sicp练习2.73的前置程序
- 小程序获取用户头像、昵称
- Windows10 插入耳机没声音,安装驱动无效问题解决
- 检测PE文件的有效性
- Android中的缓存策略,实战打造ImageLoader
- 202203读书-《 测试有道:微软测试技术心得》
- 怎样在php中制作电子相册,免费电子相册制作软件 怎样把照片制作成电子相册并加背景音乐?...
- TD源链:让技术回归本质
- Linux 网络编程学习笔记——二、IP 协议详解
- 真题集P110---2018年真题
- Spring和SpringBoot中针对单一接口多种实现的支持
- 赛码网--求数列的和
- 28岁程序员期权过亿从字节退休,当事人:同级的张天一比我财富自由多了
- 股神巴菲特十大致富秘籍
热门文章
- Linux系统压缩及解压缩
- Cent OS yum 安装 Adobe flash player
- http://blog.csdn.net/myan/article/details/1906
- C# Winform编程之Button
- 【转】定位oops的具体代码行
- 参数方程求二阶偏导_偏微分方程
- 2139=数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
- Feign从配置文件中读取url
- MyBatisPlus怎么忽略映射字段
- Server.MapPath()的用法