通过打印信息来调试代码的方式常用的有两种:
1、通过在Mess中信息窗来显示所需要输出的信息
2、通过将所要输出的信息输出的文件中来查看所需要的信息
1、通过Mess显示信息
此种方式也有两种:
第一种:比较简单
【以显示耗时为例】
CTime ctimestart = ::GetCurrentTime();//add by yuan.wang20171107
/****要测试的耗时代码*******/
CTime ctimeend = ::GetCurrentTime();
CTimeSpan span = ctimeend - ctimestart;
int sss = span.GetTotalSeconds();//系统函数,计算总的耗时单位为秒(s)
CString str;
str.Format(_T(" time: %d"), sss);
KXLOG_INFO(str,KXSZ_LOG_CATEGORY_COMMON);//将要显示的信息打印到mess中
第二种:自己写一个函数实现显示功能
【实现函数】
void ShowMessage( const char* msg) // 显示通信信息
{
HWND hMessWnd = ::FindWindow( "RDBmess"/*"kingmess"*/, NULL);//<Modified by weiwang.shan, Task[12860],2015-12-14>
char szMess[128];
memset(szMess, 0, sizeof(szMess));
ATOM messAtom;
if( hMessWnd)
{
strncpy( szMess, msg,min(127,strlen(msg)) );
if(strlen(msg)>=127)
szMess[127]=0;
else
szMess[strlen(msg)] = 0;
messAtom = GlobalAddAtom( szMess );
ASSERT( messAtom );
unsigned long messId = WM_MESSAGE_OUTPUT;
::SendMessage( hMessWnd, WM_MESSAGE_OUTPUT, (WPARAM)messAtom, 0 );
GlobalDeleteAtom( messAtom );
}
}
调用格式:
CString str;
str.Format(_T("Connect::%s pServer::%s pNode::%s"), strLocal, pServer, pNode);
ShowMessage(str);
2、将需要打印的信息输出到文件中
方法一:仅输出所要输出的信息
【实现函数】
#define TEST_FILE_PATH _T("c:\\test.txt")//输出路径
void xxx::MyTrace(CString lpszMsg)//xxx 实现函数所在的类名
{
CStdioFile file;
if (_taccess(TEST_FILE_PATH, 0) == -1)
{
if(file.Open(TEST_FILE_PATH, CStdioFile::modeCreate))
{
file.Close();
}
}
if (file.Open(TEST_FILE_PATH, CStdioFile::modeWrite | CStdioFile::shareDenyNone))
{
file.SeekToEnd();
CTime time = CTime::GetCurrentTime();
CString strMsg = time.Format(_T("[%Y-%m-%d-%H-%M-%S]"));
strMsg += lpszMsg;
strMsg +=_T("\n");
file.WriteString(strMsg);
file.Close();
}
}
【调用函数】
CString Msg;//add by yuan.wang,[test]
Msg.Format(_T("ValidateItems: IOServerType = %d pResults[Index].vtCanonicalDataType = %d"), IOServerType, pResults[Index].vtCanonicalDataType);//add by yuan.wang,[test]
xxx::MyTrace(Msg); //add by yuan.wang,[test]
方法二:可对函数进行修改,通过传递参数 来输出所需要的信息
【实现函数】
#define TEST_FILE_PATH_0 _T("c:\\testCount.txt")
void OPCGroupBase::MyTrace(CString lpszMsg,int COUNT)
{
CStdioFile file;
if (_taccess(TEST_FILE_PATH_0, 0) == -1)
{
if(file.Open(TEST_FILE_PATH_0, CStdioFile::modeCreate))
{
file.Close();
}
}
if (file.Open(TEST_FILE_PATH_0, CStdioFile::modeWrite | CStdioFile::shareDenyNone))
{
file.SeekToEnd();
CTime time = CTime::GetCurrentTime();
CString strMsg = time.Format(_T("[%Y-%m-%d-%H-%M-%S]"));
strMsg += lpszMsg;
CString countstr;
countstr.Format(_T(";异步请求的数量:%d"),COUNT);
strMsg += countstr;
strMsg +=_T("\n");
file.WriteString(strMsg);
file.Close();
}
}