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|