简单的调试输出类,感觉不错简单易用,备份下

简单的调试输出类,感觉不错简单易用,备份下
#ifndef __FORMATSTRING_H__
#define  __FORMATSTRING_H__

#include 
< windows.h >
#include 
< stdio.h >
#include 
< shlwapi.h >

#pragma comment(lib, 
" shlwapi.lib " )

static   const   int  FS_BUFFER_DEFAULT  =   1024 ;

template
< const   int  iBufLen >
class  CFormatString
{
public:
    CFormatString( LPCTSTR szStr,  )
    
{
        va_list vl;
        va_start(vl, szStr);
        vsnprintf(szBuffer, 
sizeof(szBuffer)-1, (char*)szStr, vl);
        va_end(vl);
    }

    
operator char *()       return szBuffer; }
    
operator const char *() return szBuffer; }
protected:
    
char szBuffer[iBufLen];
}
;

template
< const   int  iBufLen >   const   char   *  FormatString(  const   char   *  szString,  )
{
    
if( NULL == szString )
        
return NULL;

    
int nLength = (int)strlen( szString );
    
if ( nLength <=0 )
        
return NULL;

    
static char data[iBufLen];

    va_list    va;
    va_start( va, szString );
    wvnsprintf(data, 
sizeof(data)-1, szString, va );
    va_end( va );

    
return data;
}


typedef CFormatString
< FS_BUFFER_DEFAULT >  CFMSTR;
#define  FMSTR FormatString<FS_BUFFER_DEFAULT>

#endif   //  __FORMATSTRING_H__

CFMSTR  out("输出参数语句%d..,%s,",.....);


也可以自己封装一些类或函数方便调试输出查找错误
void     setLastError(ST_Type type, 
                     
const   char   * message , const   char   * filename ,
                     
int  line ,  bool  log_msg  /**/ /*= true*/
                     
bool  _debug_  /**/ /*= true*/ bool  _show_box  /**/ /*= false*/ ) {
    
    strncpy(last_error.message, message, THE_MAX_LASTERROR);
    strncpy(last_error.filename, filename, MAX_PATH);
    last_error.line 
= line;
    
    
char szBuffer[ THE_MAX_LASTERROR *2 ];
    sprintf(szBuffer, 
"%s (%s,%d)", last_error.message, last_error.filename, last_error.line);

    
if( log_msg ){
        note_message(szBuffer);
    }

    
    
if( _debug_ ){
        OutputDebugStringA(szBuffer);
    }

    
    
if( _show_box ){
        
switch(type){
            
case ST_ERROR:
                MessageBoxA(GetActiveWindow(), szBuffer, 
"ERROR", MB_OK|MB_ICONERROR);
            
break;
            
case ST_WARNING:
                MessageBoxA(GetActiveWindow(), szBuffer, 
"WARNING", MB_OK|MB_ICONWARNING);
            
break;
            
default:
                MessageBoxA(GetActiveWindow(), szBuffer, 
"NOTE", MB_OK);
            
break;
        }

    }

}



/**/ /**
    vsprintf(  );
    va pszMsg buffer not great 2Kb . 
*/

const   char   * __va(  const   char   * pszMsg ,  ) {
    
static char    msg[2][ 4096 ] = {0};
    
static int        ni = 0;

    
char*    pbuf = msg[ ni++ & 1 ];

    va_list va;
    va_start( va , pszMsg );

    size_t size 
= _vscprintf( pszMsg , va );
    
if( size > 4096 ){
        va_end( va );    
// buffer error . 
        return pbuf;
    }


    vsprintf( pbuf , pszMsg , va );
    va_end( va );

    
return pbuf;//msg[0];
}


文件查看 Debug.rar

你可能感兴趣的:(简单的调试输出类,感觉不错简单易用,备份下)