ERRORS9.H

[目次 | 型・クラス・構造体 | マクロ]

目次

型・クラス・構造体一覧

マクロ一覧


   1|/***************************************************************************
   2|  1. <<< [Errors9] デバッグツール・軽量版 >>> 
   3|****************************************************************************/
   4|
   5|#ifndef __Errors_H
   6|#define __Errors_H
   7|
   8| 
   9|/***********************************************************************
  10|  2. <<< モジュール設定 >>> 
  11|************************************************************************/
  12|#ifndef Errors_SETTING
  13|#define Errors_SETTING
  14|
  15|/* デバッグツールを取除く(あったら、コンパイラからメッセージを出す)*/
  16|/*#define  ERRORS_CUT_DEBUG_TOOL */
  17|
  18|#endif /* Errors_SETTING */
  19| 
  20|/*************************************************************************
  21|  3. <<< Error Code >>> 
  22|**************************************************************************/
  23|
  24|#define  Errors_NoError      0    /* [Compone_GID:Errors_Code] */
  25|#define  Errors_ErrorStart   101  /* [Compone_GID:Errors_Code] */
  26|#define  Errors_Unofficial   102  /* [Compone_GID:Errors_Code] エラーコードを割当てていない内部的なエラー */
  27|#define  Errors_InitMiss     103  /* [Compone_GID:Errors_Code] */
  28|#define  Errors_OrderMiss    104  /* [Compone_GID:Errors_Code] */
  29|#define  Errors_ErrorEnd     105  /* [Compone_GID:Errors_Code] */
  30|#define  Errors_FinishChker  106  /* [Compone_GID:Errors_Code] 初期化と後始末の関係が合っていない */
  31|#define  Errors_NotSupport   107  /* [Compone_GID:Errors_Code] 一般的な未サポート */
  32|#define  Errors_ChkRet       108  /* [Compone_GID:Errors_Code] エラー返り値 */
  33|#define  Errors_ASSERT       109  /* [Compone_GID:Errors_Code] */
  34|#define  Errors_BadCheckSum  110  /* [Compone_GID:Errors_Code] */
  35|#define  Errors_Err_FuncLogNotInit  111    /* [Compone_GID:Errors_Code] */
  36|#define  Errors_Err_Errno    112  /* [Compone_GID:Errors_Code] */
  37|#define  Errors_Err_DoubleCount 113 /* [Compone_GID:Errors_Code] */
  38|#define  Errors_Err_DoubleInit  114  /* [Compone_GID:Errors_Code] */
  39|#define  Errors_Err_NoInit      115  /* [Compone_GID:Errors_Code] */
  40| 
  41|/*-----------------------------------------------------------------*/
  42|/* 4. <<< Interface Area ----------------------------------------->>> */ 
  43|/*-----------------------------------------------------------------*/
  44|
  45|#ifdef __cplusplus
  46|extern "C" {
  47|#endif
  48|
  49|
  50| 
  51|/***********************************************************************
  52|  5. <<< デバッグツール >>> 
  53|************************************************************************/
  54|void  MARK(void);
  55|void  COUNT( int n );
  56|void  WD( int x );
  57|void  WS( char* x );
  58|
  59|/* ASSERT( conr ); */
  60|
  61|void  error(void);
  62|void  error2_0( int code, const char* msg );
  63|/* void  error2_1( int code, const char* msg, v1 ); */
  64|/* void  error2_2( int code, const char* msg, v1, v2 ); */
  65|/* void  error2_3( int code, const char* msg, v1, v2, v3 ); */
  66|/* void  error2_4( int code, const char* msg, v1, v2, v3, v4 ); */
  67|/* void  error2_5( int code, const char* msg, v1, v2, v3, v4, v5 ); */
  68|
  69|void  bp( const char* file, int line, int type, int data );
  70|
  71|
  72|void  Errors_printf( const char* fmt, ... );
  73|void  Errors_printf_release( const char* fmt, ... );
  74|
  75|
  76|#define  ERRORS_INITCHK_VAR  /* cut */
  77|
  78|
  79|
  80|/* 以下は内部用 */
  81|void  Errors_Mark_imp( char* file, int line );
  82|int   Errors_Count_imp( int n );
  83|void  Errors_WD_imp( char* file, int line, int x, char* name, void* p );
  84|void  Errors_WS_imp( char* file, int line, const char* x, char* name, void* p );
  85|void  Errors_WP_imp( char* file, int line, void* ver, char* name, void* p );
  86|int   Errors_getDispCh( int c );
  87|
  88|
  89| 
  90|/***************************************************************************
  91|  6. <<< [Errors_Log, Errors_log] 記録領域 >>> 
  92|  7. <<< [Errors_log_p] 記録を次に格納するアドレス >>>
  93|【補足】
  94|・Errors_log 変数をダンプ表示してプロセッサの通過状況を確認します。
  95|  内容は Errors_Log の構造体の配列です。
  96|・ログの領域をあふれたときは、後半をクリアして記録を再開します。
  97|  ただし、ちょうど半分の位置に file == クリア回数、他のメンバ変数 == 0 の
  98|  構造体データが記録されます。
  99|・type, data は、各種マクロによって内容が異なります。 内容は次のとおり。
 100|  (MARK) type=0 data=0  (WD) type=1 data=変数値  (WS) type=2 data=文字列アドレス
 101|  (ASSERT) type=0xAA data=0  (error) type-0xEE data=msg(参照→error)
 102|****************************************************************************/
 103|typedef  struct _Errors_Log {
 104|  char*  file;
 105|  int    line;
 106|  int    type;  /* →補足 */
 107|  int    data;
 108|} Errors_Log;
 109|
 110|#define  Errors_log_m  256
 111|
 112|extern  Errors_Log   Errors_log[Errors_log_m];
 113|extern  Errors_Log*  Errors_log_p;
 114|
 115|
 116|/* 以下は内部用 */
 117|void  Errors_Log_add( const char* file, int line, int type, int data );
 118| 
 119|#ifdef __cplusplus
 120|}
 121|#endif
 122|
 123|/*-----------------------------------------------------------------*/
 124|/* 8. <<< Mapping Area ------------------------------------------->>> */ 
 125|/*-----------------------------------------------------------------*/
 126|
 127|
 128| 
 129|/***********************************************************************
 130|  9. <<< [MARK] プロセッサが通過したら表示する >>> 
 131|************************************************************************/
 132|#ifdef  ERRORS_CUT_DEBUG_TOOL
 133|  #define  MARK()  __cut_debug_tool
 134|#else
 135|  #if defined(ERRORS_PRINTF_TO_BINMEM) && ! defined(ERRORS_PRINTF_TO_SDV)
 136|    #define  MARK()  Errors_Log_add( __FILE__, __LINE__, 0, 0 )
 137|  #else
 138|    #define  MARK()  Errors_Mark_imp( __FILE__, __LINE__ )
 139|  #endif
 140|#endif
 141|
 142|
 143|
 144| 
 145|/***********************************************************************
 146|  10. <<< [COUNT] プロセッサが通過回数を数える >>> 
 147|************************************************************************/
 148|#ifdef  ERRORS_CUT_DEBUG_TOOL
 149|  #define  COUNT(n)  __cut_debug_tool
 150|#else
 151|  #define  COUNT(n)  if ( Errors_Count_imp( n ) )
 152|#endif
 153|
 154| 
 155|/***********************************************************************
 156|  11. <<< [BK] ブレークする >>> 
 157|************************************************************************/
 158|#ifdef  ERRORS_CUT_DEBUG_TOOL
 159|  #define  BK  __cut_debug_tool
 160|#else
 161|  #define  BK  bp( __FILE__, __LINE__, 0xBBBB, 0xBBBB );
 162|#endif
 163|
 164| 
 165|/***********************************************************************
 166|  12. <<< [WD, WD0, WS, WS0] 変数の値を記録する >>> 
 167|************************************************************************/
 168|#ifdef  ERRORS_CUT_DEBUG_TOOL
 169|  #define  WD(x)   __cut_debug_tool
 170|  #define  WD0(x)  __cut_debug_tool
 171|  #define  WS(x)   __cut_debug_tool
 172|  #define  WS0(x)  __cut_debug_tool
 173|  #define  WP(x)   __cut_debug_tool
 174|  #define  WP0(x)  __cut_debug_tool
 175|#else
 176|  #if defined(ERRORS_PRINTF_TO_BINMEM) && ! defined(ERRORS_PRINTF_TO_SDV)
 177|    #define  WD(x)  Errors_Log_add( __FILE__, __LINE__, 1, x )
 178|    #define  WD0(x) WD(x)
 179|    #define  WS(x)  Errors_Log_add( __FILE__, __LINE__, 2, (int)(x) )
 180|    #define  WS0(x) WS(x)
 181|    #define  WP(x)  Errors_Log_add( __FILE__, __LINE__, 1, (int)(x) )
 182|    #define  WP0(x) WP(x)
 183|  #else
 184|    #define  WD(x)  Errors_WD_imp( __FILE__, __LINE__, x, #x, &x )
 185|    #define  WD0(x) Errors_WD_imp( __FILE__, __LINE__, x, #x, NULL )
 186|    #define  WS(x)  Errors_WS_imp( __FILE__, __LINE__, x, #x, &x )
 187|    #define  WS0(x) Errors_WS_imp( __FILE__, __LINE__, x, #x, NULL )
 188|    #define  WP(x)  Errors_WP_imp( __FILE__, __LINE__, (void*)(x), #x, (void*)&x )
 189|    #define  WP0(x) Errors_WP_imp( __FILE__, __LINE__, (void*)(x), #x, NULL )
 190|  #endif
 191|#endif
 192| 
 193|/***********************************************************************
 194|  13. <<< [ASSERT] 事前条件、事後条件 >>> 
 195|【補足】
 196|・条件を満たさなかった場合、Errors_log に出力します。
 197|************************************************************************/
 198|#ifdef  NDEBUG
 199|  #define  ASSERT(x)
 200|#else
 201|  #define  ASSERT(x) \
 202|   if ( !(x) )  bp( __FILE__, __LINE__, 0xAAAA, 0xAAAA )
 203|#endif
 204|
 205|
 206| 
 207|/***********************************************************************
 208|  14. <<< [ERRORS_DEBUG_TRUE, ERRORS_DEBUG_FALSE] デバッグ >>> 
 209|************************************************************************/
 210|#ifdef  NDEBUG
 211|  #define  ERRORS_DEBUG_TRUE    __cut_debug_tool()
 212|  #define  ERRORS_DEBUG_FALSE   0
 213|#else
 214|  #define  ERRORS_DEBUG_TRUE    1
 215|  #define  ERRORS_DEBUG_FALSE   0
 216|#endif
 217|
 218|
 219| 
 220|/***********************************************************************
 221|  15. <<< [ERRORS_WARNING_0] 警告 >>> 
 222|【補足】
 223|・デバッグ版では、エラー出力します。
 224|************************************************************************/
 225|#ifdef  NDEBUG
 226|  #define  ERRORS_WARNING_0( s )
 227|#else
 228|  #define  ERRORS_WARNING_0( s )  Errors_printf( s )
 229|#endif
 230|
 231| 
 232|/***********************************************************************
 233|  16. <<< [ERRORS_INITCHK] 初期化チェッカ >>> 
 234|【補足】
 235|・非対応です。
 236|************************************************************************/
 237|#define  ERRORS_INITCHK( m, n )
 238| 
 239|/***********************************************************************
 240|  17. <<< [error, error2_0] エラー発生 >>> 
 241|【補足】
 242|・条件を満たさなかった場合、Errors_log に出力します。
 243|・パラメータは、Errors_log に記録されています。
 244|  記録のされ方については、下記の #define の内容を参照。
 245|************************************************************************/
 246|#if defined(ERRORS_PRINTF_TO_BINMEM) && ! defined(ERRORS_PRINTF_TO_SDV)
 247|
 248|#define  error() \
 249|  bp( __FILE__, __LINE__, 0xEE, 0x0 )
 250|
 251|#define  error2_0( code, msg ) \
 252|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 253|
 254|#define  error2_1( code, msg, v1 ) \
 255|  Errors_Log_add( (char*)(v1), 0, 0, 0xEE ), \
 256|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 257|
 258|#define  error2_2( code, msg, v1, v2 ) \
 259|  Errors_Log_add( (char*)(v1), (int)(v2), 0, 0xEE ), \
 260|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 261|
 262|#define  error2_3( code, msg, v1, v2, v3 ) \
 263|  Errors_Log_add( (char*)(v1), (int)(v2), (int)(v3), 0xEE ), \
 264|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 265|
 266|#define  error2_4( code, msg, v1, v2, v3, v4 ) \
 267|  Errors_Log_add( (char*)(v1), (int)(v2), (int)(v3), 0xEE ), \
 268|  Errors_Log_add( (char*)(v4), 0, 0, 0xEE ), \
 269|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 270|
 271|#define  error2_5( code, msg, v1, v2, v3, v4, v5 ) \
 272|  Errors_Log_add( (char*)(v1), (int)(v2), (int)(v3), 0xEE ), \
 273|  Errors_Log_add( (char*)(v4), (int)(v5), 0, 0xEE ), \
 274|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 275|
 276|#else
 277|
 278|#define  error() \
 279|  Errors_printf_release( "error!" ), \
 280|  bp( __FILE__, __LINE__, 0xEE, 0x0 )
 281|
 282|#define  error2_0( code, msg ) \
 283|  Errors_printf_release( msg ), \
 284|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 285|
 286|#define  error2_1( code, msg, v1 ) \
 287|  Errors_printf_release( msg, v1 ), \
 288|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 289|
 290|#define  error2_2( code, msg, v1, v2 ) \
 291|  Errors_printf_release( msg, v1, v2 ), \
 292|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 293|
 294|#define  error2_3( code, msg, v1, v2, v3 ) \
 295|  Errors_printf_release( msg, v1, v3 ), \
 296|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 297|
 298|#define  error2_4( code, msg, v1, v2, v3, v4 ) \
 299|  Errors_printf_release( msg, v1, v2, v3, v4 ), \
 300|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 301|
 302|#define  error2_5( code, msg, v1, v2, v3, v4, v5 ) \
 303|  Errors_printf_release( msg, v1, v2, v3, v4, 5 ), \
 304|  bp( __FILE__, __LINE__, 0xEE, (int)(msg) )
 305|
 306|#endif
 307| 
 308|/***********************************************************************
 309|  18. <<< [Errors_printf] デバッグ表示 >>> 
 310|【補足】
 311|・Errors_log に出力します。
 312|************************************************************************/
 313|#ifdef  ERRORS_CUT_DEBUG_TOOL
 314|  #define  Errors_printf   __cut_debug_tool
 315|#else
 316|  #define  Errors_printf   Errors_printf_release
 317|#endif
 318|
 319|
 320|
 321| 
 322|/***********************************************************************
 323|  19. <<< 非対応 >>> 
 324|************************************************************************/
 325|  #define  Errors_notSupport()
 326|  #define  ERRORS_FUNCLOG_INIT()
 327|  #define  Errors_FuncLog_print()   __cut_debug_tool_or_nouse_funcLog
 328|  #define  ERRORS_FUNCLOG_PRINT()
 329|  #define  ERRORS_FUNCLOG_ONLONGJUMP()
 330|  #define  ERRORS_FUNC_CPP_VAR( _func )
 331|  #define  ERRORS_FUNC_START( _func )                   /* C   言語用デフォルト */
 332|  #define  ERRORS_FUNC_START_CPP( _class_func )         /* C++ 言語用デフォルト */
 333|  #define  ERRORS_FUNC_START2( level, _func )           /* C   言語用・レベル指定 */
 334|  #define  ERRORS_FUNC_START2_CPP( level, _class_func ) /* C++ 言語用・レベル指定 */
 335|  #define  ERRORS_FUNC_END( _func )                     /* C   言語用デフォルト */
 336|  #define  ERRORS_FUNC_END_CPP( _class_func )           /* C++ 言語用デフォルト */
 337|  #define  ERRORS_FUNC_END2( level, _func )             /* C   言語用・レベル指定 */
 338|  #define  ERRORS_FUNC_END2_CPP( level, _class_func )   /* C++ 言語用・レベル指定 */
 339|  #define  ERRORS_VERSION( name, version )
 340| 
 341|#endif 
 342| 
 343|