Robotics/Software Tech.

[MFC]TRACE 파일 저장

Hellboy 2008. 1. 1. 19:15

주로 프로그램 개발할때, 중간중간에 문제점을 판단하기위해서 TRACE를 걸어놓는데,

대부분 DBMON으로 프로그램 실행한 후에 TRACE걸린 내용을 확인하지만..

프로그램을 개발자 PC가 아닌 다른 곳에 설치해놓고 매번 프로그램 오류내용을 확인하려고

DBMON으로 확인할 수 가 없다.

그래서, TRACE의 내용을 파일로 저장해놓고 이 파일을 열어서 확인해보는 방법은 어떤가해서..

아래의 방법을 찾아봤다..



StdAfx.h에 아래 코드의 굵은 글씨 부분을 작성한다.


#if !defined(AFX_STDAFX_H__B4E10403_E7DB_4A11_91BE_68BB73CF5A3D__INCLUDED_)
#define AFX_STDAFX_H__B4E10403_E7DB_4A11_91BE_68BB73CF5A3D__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define VC_EXTRALEAN  // Exclude rarely-used stuff from Windows headers

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions
#include <afxdisp.h>        // MFC Automation classes
#include <afxdtctl.h>  // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>   // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

#include <afxsock.h>  // MFC socket extensions
#include <afxtempl.h>


#undef TRACE
void TRACE( char *pFormat, ... );


//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_STDAFX_H__B4E10403_E7DB_4A11_91BE_68BB73CF5A3D__INCLUDED_)



StdAfx.cpp에 아래 코드의 굵은 글씨 부분을 작성한다.


// stdafx.cpp : source file that includes just the standard includes
// iClient.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information

#include "stdafx.h"


#include <afxmt.h>

CCriticalSection g_cs;

 

void TRACE( char *pFormat, ... )
{
    g_cs.Lock();

   

    CFile f;
    f.Open( "c:\\prj\\trace_log.txt",
// 파일이 생성될 경로를 각자 원하는 곳으로 변경해야 함.

        CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate );

   

    f.SeekToEnd();

 

    char buff[1024];
    va_list arglist;

 

    va_start( arglist, pFormat );
    vsprintf( buff   , pFormat, arglist );
    va_end( arglist );

 

    CTime t = CTime::GetCurrentTime();
    CString strTime;
 
    strTime.Format( "%02d:%02d:%02d ",
        t.GetHour(), t.GetMinute(), t.GetSecond() );

    f.Write ( strTime, strTime.GetLength() );

   

    strcat  ( buff, "\r\n"       );
    f.Write ( buff, strlen(buff) );

   

    f.Close();

   

    g_cs.Unlock();
}

 

사용 방법

 

TRACE( "서버가 시작됨 !!" );

TRACE( "수신된 바이트 : %d", nRecv );

TRACE( "변수의 값 : %d", nRead );

TRACE( "문자열 : %s", szBuff );

...

 

 

trace_log.txt 출력 결과


12:08:22 서버가 시작됨 !!

12:08:23 수신된 바이트 : 5

12:08:25 변수의 값 : 10240

12:08:33 문자열 : Hello