关闭

值得借鉴的 异常捕获体系 (二)

591人阅读 评论(0) 收藏 举报

#include "stdafx.h"

//--------------------------------------------------------------------------------
//
// Filename   : Assert.cpp
//
//--------------------------------------------------------------------------------

// include files
#include "stdafx.h"
#include "Assertx.h"
#include "Type.h"
#include <time.h>
#ifdef __LINUX__
#include <execinfo.h>
#endif

int g_Command_Assert=0 ;//控制参数,0:会通过弹出对话框让用户选择(缺省值)
      //   1:忽略
      //   2:继续抛出异常用于获取运行堆栈
int g_Command_IgnoreMessageBox=FALSE ;//控制参数,跳过MyMessageBox的中断

 

 

VOID __show__( const CHAR* szTemp )
{

#ifdef __LINUX__
 printf("Assert:%s",szTemp);
#endif

 //保存日志
#ifndef GAME_CLIENT
 FILE* f = fopen( "./Log/assert.log", "a" ) ;
 fwrite( szTemp, 1, strlen(szTemp), f ) ;
 fwrite( "\r\n", 1, 2, f ) ;
 fclose(f) ;
#endif

#if defined(__WINDOWS__)
 static MyLock lock ;
 if( g_Command_Assert!=1 )
 {
  lock.Lock() ;
  INT iRet = ::MessageBoxA( NULL, szTemp, "异常", MB_OK ) ;
  lock.Unlock() ;
 }
#elif defined(__LINUX__)
 
#endif

#ifdef GAME_CLIENT
 throw(std::string(szTemp));
#else
 throw(1);
#endif
}

VOID __messagebox__(const CHAR*msg )
{
 if( g_Command_IgnoreMessageBox )
  return ;
#if defined(__WINDOWS__)
 ::MessageBoxA( NULL, msg, "信息", MB_OK ) ;
#elif defined(__LINUX__)
#endif
}
//--------------------------------------------------------------------------------
//
// __assert__
//
//
//--------------------------------------------------------------------------------
VOID __assert__ ( const CHAR * file , UINT line , const CHAR * func , const CHAR * expr )
{
 CHAR szTemp[1024] = {0};
 
#ifdef __LINUX__ //换个格式
 sprintf( szTemp, "[%s][%d][%s][%s]\n", file, line, func, expr ) ;
#else
 sprintf( szTemp, "[%s][%d][%s][%s]", file, line, func, expr ) ;
#endif
 __show__(szTemp) ;
}

VOID __assertex__ ( const CHAR * file , UINT line , const CHAR * func , const CHAR * expr ,const CHAR* msg)
{
 CHAR szTemp[1024] = {0};
 
#ifdef __LINUX__
 sprintf( szTemp, "[%s][%d][%s][%s]\n[%s]\n", file, line, func, expr ,msg ) ;
#else
 sprintf( szTemp, "[%s][%d][%s][%s]\n[%s]", file, line, func, expr ,msg ) ;
#endif
 __show__(szTemp) ;
}

VOID __assertspecial__ ( const CHAR * file , UINT line , const CHAR * func , const CHAR * expr ,const CHAR* msg)
{
 CHAR szTemp[1024] = {0};
 
#ifdef __LINUX__
 sprintf( szTemp, "S[%s][%d][%s][%s]\n[%s]\n", file, line, func, expr ,msg ) ;
#else
 sprintf( szTemp, "S[%s][%d][%s][%s]\n[%s]", file, line, func, expr ,msg ) ;
#endif
 __show__(szTemp) ;
}
//--------------------------------------------------------------------------------
//
//
//--------------------------------------------------------------------------------
VOID __protocol_assert__ ( const CHAR * file , UINT line , const CHAR * func , const CHAR * expr )
{
 printf( "[%s][%d][%s][%s]", file, line, func, expr ) ;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:343697次
    • 积分:4111
    • 等级:
    • 排名:第7776名
    • 原创:60篇
    • 转载:115篇
    • 译文:0篇
    • 评论:25条
    最新评论