outputdebugstring函数的封装

来源:互联网 发布:淘宝v2是什么意思 编辑:程序博客网 时间:2024/05/22 01:53

使用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_DEBUG1#define  LOGLEVEL_INFO2#define  LOGLEVEL_WARN3#define  LOGLEVEL_ERROR4int 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噢

阅读全文
0 0