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

原创 2012年03月30日 14:23:55

#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 ) ;
}

相关文章推荐

java异常体系以及异常的捕获和处理和图解详解

java 异常是程序运行过程中出现的错误。Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。在Java API中定义了许多异常类,分为两大类,错误...

java异常体系理解

  • 2014年04月29日 17:39
  • 25KB
  • 下载

异常体系结构

  • 2013年05月23日 21:59
  • 49KB
  • 下载

PowerPC体系基于vxWorks的异常堆栈切换

1. 简介 本文简要介绍了PowerPC体系结构下vxWorks操作系统的异常处理机制,指出当前机制存在的缺陷,即:中断级的异常处理在任务上下文中执行,异常处理堆栈基址依赖于当前任务的栈帧指针,如果...

java异常体系结构详解

前几天在参加网易和360公司的在线考试的时候,都出了一道关于java中异常类的多项选择题。这几天翻看了相关书籍和网上一些资料,结合自己的理解与思考,将自己的一些收获记录如下: 先来看看java中异常的...
  • htq__
  • htq__
  • 2016年03月31日 11:41
  • 1022

异常处理体系结构

在裸板程序中,中断的head.S如下:
  • ychongx
  • ychongx
  • 2014年06月03日 22:47
  • 358

黑马程序员_异常体系

什么事是常: 异常:就是不正常。程序在运行时出现的不正常情况。其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个...

黑马程序员——Java基础——异常体系

点击打开链接 点击打开链接 点击打开链接 android培训、点击打开链接 点击打开链接 java培训、期待与您交流!">点击打开链接 点击打开链接...

java异常体系结构

异常是指程序运行时出现的错误,java语言的异常处理框架是java语言健壮性的一个重要体现。 java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。 在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:值得借鉴的 异常捕获体系 (二)
举报原因:
原因补充:

(最多只允许输入30个字)