15-3-¶ó.°¡º¯ Àμö ÇÔ¼öÀÇ È°¿ë

°¡º¯ Àμö ÇÔ¼ö´Â ÇÑ ¹ø È£Ãâ·Î ¿©·¯ °³ÀÇ Á¤º¸¸¦ ´Ù¾çÇÑ ¹æ¹ýÀ¸·Î ´Ù·ê ¼ö ÀÖ´Ù´Â ¸é¿¡¼­ Æí¸®ÇÏ´Ù. ƯÈ÷ printf ÇÔ¼ö´Â ´Ù¾çÇÑ Å¸ÀÔÀÇ º¯¼öµéÀ» ÇѲ¨¹ø¿¡ Ãâ·ÂÇÒ ¼ö ÀÖ¾î º¯¼ö°ªÀ» È®ÀÎÇØ º¼ ¶§ ¾ÆÁÖ À¯¿ëÇÏ´Ù. ÀÌ·± ÇÔ¼ö¸¦ Á÷Á¢ ¸¸µé·Á¸é µ¶ÀÚÀûÀ¸·Î ¼­½ÄÀ» Á¤ÀÇÇÏ°í ¼­½Ä ¹®ÀÚ¿­°ú ´ëÀÀµÇ´Â °¡º¯ Àμö¸¦ Á÷Á¢ Àд º¹ÀâÇÑ ·çƾÀ» ¸¸µé¾î¾ß Çϴµ¥ ´ÙÇàÈ÷ ÀÌ·± ÀÏÀ» ´ë½ÅÇØ ÁÖ´Â ÇÔ¼öµéÀ» ÁغñµÇ¾î ÀÖ´Ù. ´ëÇ¥ÀûÀ¸·Î ´ÙÀ½ µÎ ÇÔ¼ö¸¸ ¼Ò°³ ÇÑ´Ù.

 

int vprintf( const char *format, va_list argptr );

int vsprintf( char *buffer, const char *format, va_list argptr );

 

ÀÌ¿Ü¿¡ vscanf, vsscanf µîÀÇ ÇÔ¼öµµ Àִµ¥ ¾ËÆĺª v(Variable)·Î ½ÃÀÛÇÑ´Ù°í Çؼ­ ÀÌ·± ÇÔ¼öµéÀ» v°è¿­ÀÇ ÇÔ¼ö¶ó°í ÇÑ´Ù. À§ µÎ ÇÔ¼öµéÀº printf, sprintf¿Í µ¿ÀÏÇÑ ±â´ÉÀ» ¼öÇàÇϴµ¥ °¡º¯ Àμö¸¦ Á÷Á¢ ³ª¿­ÇÏ´Â ´ë½Å °¡º¯ Àμö°¡ ½ÃÀ۵Ǵ ¹øÁö¸¸À» Àμö·Î ÃëÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù. Áï ½ÇÁ¦·Î °¡º¯ Àμö¸¦ ÃëÇÏÁö´Â ¾ÊÀ¸¸ç °¡º¯ Àμö¸¦ ÃëÇÏ´Â ´Ù¸¥ ÇÔ¼öÀÇ ³»ºÎ¿¡¼­ printf ÀÇ ¼­½ÄÀ» Çؼ®ÇÏ°í Àû¿ëÇÏ´Â ÀÏÀ» ´ë½ÅÇÑ´Ù.

ÀÌ µÎ ÇÔ¼ö¸¦ »ç¿ëÇϸé printfó·³ µ¿ÀÛÇÏ´Â ºñ½ÁÇÑ ÇÔ¼ö¸¦ Á÷Á¢ ¸¸µé¾î ¾µ ¼ö ÀÖ´Ù. ´ÙÀ½ ÇÔ¼ö´Â C/C++¾ð¾îÀÇ °¡º¯ Àμö ±â´ÉÀ» È°¿ëÇÏ¿© ½ÇÇàÁß¿¡ º¯¼ö°ªÀ» µð¹ö°Å·Î ½Ç½Ã°£ È®ÀÎÇØ º¸´Â ±â´ÉÀ» Á¦°øÇÑ´Ù.

 

void CustomTrace(char *format, ...)

{

     char buf[1024];

     va_list marker;

    

     va_start( marker, format );

     vsprintf(buf,format,marker);

     OutputDebugString(buf);

}

 

OutputDebugStringÀ̶ó´Â API ÇÔ¼ö°¡ »ç¿ëµÇ¾ú´Âµ¥ ÀÌ ÇÔ¼ö´Â ÁÖ¾îÁø ¹®ÀÚ¿­À» µð¹ö±ë âÀ¸·Î Ãâ·ÂÇÑ´Ù. ºñÁÖ¾ó C++ÀÇ °æ¿ì Output À©µµ¿ì¿¡ ÀÌ ÇÔ¼öÀÇ Ãâ·Â ³»¿ëÀÌ ³ªÅ¸³ª¹Ç·Î ½ÇÇàÁß¿¡ º¯¼ö°ªÀÇ º¯È­¸¦ È®ÀÎÇϰųª ƯÁ¤ ÇÔ¼öÀÇ È£Ãâ ½ÃÁ¡, ȸ¼ö µîÀ» ¾Ë°í ½ÍÀ» ¶§ Áß°£ Áß°£¿¡ ÀÌ ÇÔ¼ö¸¦ »ðÀÔÇØ ³õÀ¸¸é µÈ´Ù. »ç¿ë¿¹¸¦ µéÀÚ¸é ´ÙÀ½°ú °°´Ù.

 

CustomTrace("º¯¼ö a=%d, º¯¼ö f=%f\n",a,f);

CustomTrace("ÇÔ¼ö func°¡ %d¹ø° È£ÃâµÇ¾úÀ½",count++);

 

Å×Æ®¸®½º ¿¹Á¦ÀÇ ´ÙÀ½ À§Ä¡¿¡ CustomTrace ÇÔ¼ö È£ÃâÀ» »ðÀÔÇØ ³õÀ¸¸é º®µ¹ÀÌ ÇÑÄ­¾¿ ¿òÁ÷ÀÏ ¶§¸¶´Ù ÁÖ¿ä Àü¿ªº¯¼ö°ªÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

for (;2;) {

     CustomTrace("º®µ¹=%d,ȸÀü=%d,À§Ä¡=(%d,%d)\n",brick,rot,nx,ny);

 

CustomTrace ÇÔ¼öÀÇ ³»ºÎ´Â ¹«Ã´ °£´ÜÇÏ´Ù. va_start·Î ù ¹ø° °¡º¯ ÀμöÀÇ ¹øÁö¸¦ ±¸ÇÑ ÈÄ ±× ¹øÁö¸¦ ¼­½Ä ¹®ÀÚ¿­°ú ÇÔ²² vsprintf ÇÔ¼ö·Î ³Ñ±â±â¸¸ ÇÏ¸é µÈ´Ù. OutputDebugString ÇÔ¼ö¸¦ Á÷Á¢ »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ÀÌ ÇÔ¼ö´Â ´Ü¼øÇÑ ¹®ÀÚ¿­¸¸ Ãâ·ÂÇÒ ¼ö Àִµ¥ ºñÇØ CustomTrace´Â ¼­½ÄÈ­µÈ ¹®ÀÚ¿­À» Ãâ·ÂÇÒ ¼ö ÀÖ¾î ÈξÀ ´õ Æí¸®ÇÏ´Ù.

´ÙÀ½Àº ¶È°°Àº ¸ñÀûÀÇ Á» ´õ º¹ÀâÇÑ ÇÔ¼ö¸¦ ¼Ò°³ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â Win32 ÆÄÀÏ ÀÔÃâ·Â ÇÔ¼ö±îÁö »ç¿ëÇÏ°í Àֱ⠶§¹®¿¡ ÇöÀç ´Ü°è¿¡¼­ ºÐ¼®ÇØ º¸±â´Â ¾î·Á¿ì¹Ç·Î Â÷ÈÄ¿¡ API¸¦ ¹è¿î ÈÄ¿¡ Á÷Á¢ ºÐ¼®ÇØ º¸±â ¹Ù¶õ´Ù.

 

#define DEBUGLOGFILE "c:\\DebugLog.txt"

void WriteLogFile(char *strLog,...)

{

     HANDLE hLog;

     static int count=0;

     DWORD dwWritten;

     char szLog[1024];

     char strLog2[1024];

     va_list marker;

     SYSTEMTIME st;

 

     // °¡º¯ Àμö¸¦ Á¶¸³ÇÑ´Ù.

     va_start( marker, strLog );

     vsprintf(szLog,strLog,marker);

 

     // óÀ½ È£ÃâµÉ ¶§ ÆÄÀÏÀ» ¸¸µé°í ÀÌÈĺÎÅÍ´Â ÆÄÀÏÀ» ¿­±â¸¸ ÇÑ´Ù.

     if (count == 0) {

          hLog=CreateFile(DEBUGLOGFILE,GENERIC_WRITE,0,NULL,

          CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

     } else {

          hLog=CreateFile(DEBUGLOGFILE,GENERIC_WRITE,0,NULL,

          OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

     }

 

     // ·Î±×¿¡ ÇöÀç ½Ã°£°ú Ä«¿îÅ͸¦ ±â·ÏÇÑ´Ù.

     GetLocalTime(&st);

     wsprintf(strLog2,"Ä«¿îÅÍ=%06d(%d:%d:%d:%d) %s\r\n",count++,

          st.wHour,st.wMinute,st.wSecond,st.wMilliseconds,szLog);

     SetFilePointer(hLog,0,NULL,FILE_END);

     WriteFile(hLog,strLog2,strlen(strLog2),&dwWritten,NULL);

     CloseHandle(hLog);

}

 

»ç¿ëÇÏ´Â ¹æ¹ýÀº printf³ª CustomTrace¿Í µ¿ÀÏÇÏ´Ù. ´Ü, Â÷ÀÌÁ¡À̶ó¸é Á¶¸³µÈ ¼­½Ä ¹®ÀÚ¿­ÀÌ È­¸éÀ̳ª µð¹ö±ë âÀ¸·Î Ãâ·ÂµÇ´Â °ÍÀÌ ¾Æ´Ï¶ó ÁöÁ¤ÇÑ ÆÄÀÏ¿¡ ±â·ÏµÈ´Ù´Â °Í°ú Ä«¿îÆ®, È£Ãâ ½ÃÁ¡ÀÇ ½Ã°£ µîÀ» °°ÀÌ ±â·ÏÇÑ´Ù´Â Á¡ÀÌ´Ù. ¸ÖƼ ½º·¹µå ȯ°æÀ̳ª ½Ç½Ã°£À¸·Î µ¿ÀÛÇÏ´Â ÇÁ·Î±×·¥À» µð¹ö±ëÇÒ ¶§´Â µð¹ö°Å¸¦ ¾²±â ½±Áö ¾Ê±â ¶§¹®¿¡ ¸ðµç µð¹ö±ë Á¤º¸¸¦ ÆÄÀÏ¿¡ ÀÏ´Ü ±â·ÏÇÑ ÈÄ ÆÄÀÏ¿¡ ³²°ÜÁø ·Î±×(log) Á¤º¸¸¦ ºÐ¼®ÇÏ´Â °ÍÀÌ ´õ È¿À²ÀûÀÌ´Ù.

ÀÌ·² ¶§ ÀÌ ÇÔ¼ö°¡ ¾ÆÁÖ À¯¿ëÇÏ°Ô »ç¿ëµÇ¸ç ½ÇÀü¿¡¼­ ¿©·¯ ¹ø È°¿ëÇß¾ú´Âµ¥ È¿°ú°¡ ¾ÆÁÖ ÁÁ¾Ò´Ù. ¸±¸®Áî ¸ðµå¿¡¼­¸¸ Áõ»óÀÌ ³ªÅ¸³¯ ¶§¶óµç°¡ µð¹ö°Å¸¦ ¾µ ¼ö ¾ø´Â ¼­ºñ½º·ùÀÇ ÇÁ·Î±×·¥À» µð¹ö±ëÇÒ ¶§ ÃÖÈÄÀÇ µð¹ö±ë ¹æ¹ýÀ¸·Î ƯÈ÷ ¸¹Àº È°¾àÀ» ÇÑ´Ù. ¹°·Ð ÀÌ ÇÔ¼öµµ ´õ °³¼±ÇØ º¼ ¿©Áö°¡ ¸¹Àºµ¥ ´ÙÀ½¿¡ ½Ç·ÂÀÌ ´Ã¸é Á÷Á¢ °³¼±ÇØ º¸±â ¹Ù¶õ´Ù.