在开发当中有的直接调试很方便,有的就不太好调试,所以我经常使用写日志以及输出Debug信息来进行开发。尽管我比较喜欢使用以输出Debug的信息的方式来跟踪程序。因为直接一句话:
OutputDebugString( "你想输出的信息\r\n" );
|
就可以在非调试模式下直接在DebugView上面显示输出信息了。
但是除了这种方式之外有时侯我也会使用写日志的方式来输出调试信息,虽然写文件很简单,但还是记录一下吧。方便自己同时也可能方便需要的人吧。
首先是main()函数定义:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 #include "RcLogInfo.h" 2 3 int main(void) 4 { 5 ////////////////////////////////////////////////////////////////////////// 6 char cPath[MAX_PATH]; 7 memset(cPath,0,MAX_PATH); 8 if (!GetModuleFileName(NULL,cPath,MAX_PATH)) 9 { 10 return false; 11 } 12 char *FileName = cPath + strlen(cPath)-1; 13 while(*FileName !='\\') 14 { 15 --FileName; 16 } 17 *FileName = '\0'; 18 char cFileName[MAX_PATH]={'\0'}; 19 sprintf(cFileName,"%s\\%s",cPath,"TestLog.log"); 20 21 22 ////////////////////////////////////////////////////////////////////////// 23 FILE *m_pfLogFile=NULL; 24 if(NULL != m_pfLogFile) 25 { 26 fclose(m_pfLogFile); 27 } 28 m_pfLogFile = fopen(cFileName,"at+"); 29 if(NULL == m_pfLogFile) 30 { 31 return 1; 32 } 33 34 35 ////////////////////////////////////////////////////////////////////////// 36 RcLogInfo rl; 37 rl.SetLogFile(m_pfLogFile); 38 39 40 ////////////////////////////////////////////////////////////////////////// 41 timeb aTime; 42 ftime(&aTime); 43 sprintf(rl.m_cInfo,"写日志测试******************************+++++++++++++++++++++++_________________%s .%ld ms\n",ctime(&(aTime.time)),aTime.millitm); 44 rl.WriteLogInfo(rl.m_cInfo); 45 46 47 return 0; 48 49 50 }
![复制代码](https://common.cnblogs.com/images/copycode.gif)
下面是一个写日志类实现:
/*
* 写日志类
*
*/
#pragma once
#include <windows.h>
#include <atltime.h>
#include <sys/timeb.h>
#include <iostream>
using namespace std;
class RcLogInfo
{
public :
RcLogInfo( void );
~RcLogInfo( void );
public :
//日志文件
FILE * m_pfLogFile;
char m_cInfo[255];
int SetLogFile( FILE *pfLogFile);
int WriteLogInfo( const char *pInfo);
};
|
cpp文件:
![复制代码](https://common.cnblogs.com/images/copycode.gif)
1 #include "RcLogInfo.h" 2 3 RcLogInfo::RcLogInfo(void) 4 { 5 m_pfLogFile = NULL; 6 memset(m_cInfo,NULL,sizeof(m_cInfo)); 7 } 8 9 RcLogInfo::~RcLogInfo(void) 10 { 11 if (NULL != m_pfLogFile) 12 { 13 fclose(m_pfLogFile); 14 m_pfLogFile = NULL; 15 } 16 } 17 18 int RcLogInfo::SetLogFile(FILE *pfLogFile) 19 { 20 m_pfLogFile=pfLogFile; 21 return 0; 22 } 23 24 int RcLogInfo::WriteLogInfo(const char *pInfo) 25 { 26 if(NULL != m_pfLogFile) 27 { 28 fprintf(m_pfLogFile,"%s",pInfo); 29 fflush(m_pfLogFile); 30 return 0; 31 } 32 return 1; 33 34 35 }
![复制代码](https://common.cnblogs.com/images/copycode.gif)