使用debugview分析问题时,outputdebugstring函数可以在debug和release版本中都显示信息,这比trace更加实用,但前提是你必须将它的参数形式修改成和trace或printf函数一样,下面给出简单修改后的函数形式,并利用宏定义实现日志输出:

int  DebugPrintf(LPCTSTR ptzFormat, ...)
{va_list vlArgs;TCHAR tzText[1024];va_start(vlArgs, ptzFormat);//返回-1说明缓存不够 使用下面方式获取实际所需长度//int iRealSize= _vsntprintf(NULL,0, ptzFormat, vlArgs);int iRet= _vsntprintf(tzText,1024, ptzFormat, vlArgs);if (iRet<0){tzText[1023] = '\0';}OutputDebugString(tzText); va_end(vlArgs);return iRet;
}#define LOG_PRINTF DebugPrintf#define  CONSTSTR_DEBUG      "[DEBUG] "
#define  CONSTSTR_INFO      "[INFO] "
#define  CONSTSTR_WARNING   "[WARNING] "
#define  CONSTSTR_ERROR     "[ERROR] "#define  LOGLEVEL_DEBUG     1
#define  LOGLEVEL_INFO      2
#define  LOGLEVEL_WARN      3
#define  LOGLEVEL_ERROR     4int AppLogLevel()
{static int iLogLevel =-1;if(iLogLevel<0){iLogLevel = GetPrivateProfileInt(_T("log"),_T("level"),0, _T("log_config.ini"));}return iLogLevel;
}#define  APPLOG_DEBUG(s,...) { if(AppLogLevel()<=LOGLEVEL_DEBUG){    LOG_PRINTF(CONSTSTR_DEBUG  s "\r\n", ##__VA_ARGS__);    }    }
#define  APPLOG_INFO(s,...)  { if(AppLogLevel()<=LOGLEVEL_INFO) {    LOG_PRINTF(CONSTSTR_DEBUG  s "\r\n", ##__VA_ARGS__);    }    }
#define  APPLOG_WARN(s,...)  { if(AppLogLevel()<=LOGLEVEL_WARN) {    LOG_PRINTF(CONSTSTR_DEBUG " FILE: " __FILE__ " LINE:%d," s "\r\n",__LINE__, ##__VA_ARGS__);    }    }
#define  APPLOG_ERROR(s,...) { if(AppLogLevel()<=LOGLEVEL_ERROR){    LOG_PRINTF(CONSTSTR_DEBUG " FILE: " __FILE__ " LINE:%d," s "\r\n",__LINE__, ##__VA_ARGS__);    }    }#define MOUDULE_LOG_DEBUG(s,...)  APPLOG_DEBUG("[MOUDLE_LOGTEST] " s ,##__VA_ARGS__);int _tmain(int argc, _TCHAR* argv[])
{APPLOG_DEBUG("my name is %s ","handsome boy");MOUDULE_LOG_DEBUG("my name is %s ","handsome boy");APPLOG_ERROR("my name is %s ","handsome boy");return 0;
}

呵呵,不保证没bug噢

outputdebugstring函数的封装相关推荐

  1. 函数模板案例_利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试

    案例描述: 利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序 排序规则从大到小,排序算法为选择排序 分别利用char数组和int数组进行测试 #include <iostream& ...

  2. python语言学习:python语言学习中的定义类、定义函数、封装api等详细攻略

    python语言学习:python语言学习中的定义类.定义函数.封装api等详细攻略 目录 python语言学习中的定义类 python语言学习中的定义函数 python语言学习中封装api pyth ...

  3. NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档

    NLP:两种方法(自定义函数和封装函数)实现提取两人对话内容(***分隔txt文档),并各自保存为txt文档 目录 问题探究 实现代码 问题探究 实现代码 f=open("niu.txt&q ...

  4. fcntl函数完成 set_fl()函数还有clr_fl()函数的封装

    使用fcntl函数完成,set_fl和clr_fl()函数的封装,设置文件的属性,例如:阻塞IO模型 和 非阻塞IO模型 #include <stdio.h> #include " ...

  5. 套接字错误处理函数的封装思想及函数实现

    一.套接字错误处理函数的封装思想 在上篇文章中的 CS 模型,存在 bug: 先关 server,再关 client,立即再启动 server,此时会发现无法启动.原因是:先关 server,再关 c ...

  6. php怎么上传函数,PHP单文件上传原理及上传函数的封装操作示例

    搜索热词 @H_404_0@本文实例讲述了PHP单文件上传原理及上传函数的封装操作.分享给大家供大家参考,具体如下: @H_404_0@表单: @H_404_0@0.PHP: 无标题文档 请选择您要上 ...

  7. php怎么上传函数,php上传函数怎么封装

    php上传函数怎么封装? <?php //上传文件调用 $file = $_FILES['image']; //允许上传的类型 $allow = array('image/jpeg', 'ima ...

  8. python封装一个函数并调用_python - 函数的封装与调用

    一.函数的定义,函数名,函数体以及函数的调用 1.函数的定义语法: def 函数名(): 函数体 2.函数名的定义与变量名命名一样 3.函数的封装与调用 #函数的封装 defyue():print(' ...

  9. JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块...

    JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...

最新文章

  1. 每日一皮:程序员距离人生目标只有一个沟
  2. My First Window构造过程,SendMessage同步,PostMessage异步
  3. 如何建立论坛的核心用户--引发的思考
  4. 跨语言RPC框架Thrift详解
  5. 我们在进行着一场拔河比赛……
  6. centos6.5搭建git服务器 win10 安装git客户端连接 和遇到的问题+解决方式
  7. 数据库水平切分(MyCat分片)
  8. 【BZOJ1815BZOJ1488】有色图图的同构,Polya计数+暴力
  9. PotPlayer:最强播放器,无边框
  10. Docker学习总结(35)——Docker全面认识再总结
  11. Linux Ubuntu编译内核错误,安装ubuntu以后,编译kernel出错
  12. java判断浏览器类型_判断浏览器类型
  13. html5 字段换行,关于换行以及换行属性
  14. FFT蝶形算法,IFFT
  15. gulp项目找不到html标签,通过yeoman、gulp、angular编写前段时的html模板处理,打包后找不到html的问题解决...
  16. 如何在Nginx上 安装SSL证书
  17. 虚拟语气在条件句中的应用
  18. 5.15-19采集麦克风的声音信号
  19. 在windows本地创建svn及遇到错误:svn create repository here 报错
  20. 我的理想计算机软件设计师,我的理想设计师

热门文章

  1. java 动态添加字段 以及 动态新增字段注解
  2. Android计算器功能的实现
  3. 黄山的正宗徽菜和新鲜景区
  4. 计算机网络面试常见题
  5. 将默认的maven仓库改为阿里的maven仓库
  6. CBitmap Detach和DeleteObject的关系
  7. 活动回顾丨研发效能度量线下沙龙圆满举办
  8. [Android Studio] 手机安装apk报错解决方法
  9. 加解密算法及国密算法介绍
  10. 基于SpringBoot和微信小程序的餐馆点餐系统的设计和实现