エラー処理

エラーハンドリング

ハンドラ関数は次の形式にします。

void dMessageFunction ( int errnum, const char *msg, va_list ap );

サンプルコード

例えば次のように実装します。

static void MessageHandler( int num, const char *msg, va_list ap )
{
   printf( "Error %d: ",num );
   vprintf( msg, ap );
}

この場合、次のように表示されます。

Error 2: mass must be > 0 (c:\ode-0.11.1\ode\src\mass.cpp:49)

これはハンドリングしなかった場合、次のように表示されるメッセージです。

assertion "dMassCheck(mass)" failed in c:\ode-0.11.1\ode\src\ode.cpp:493

設定

引数のfnに0を渡すと、既定のハンドラが使用されます。

void dSetErrorHandler ( dMessageFunction *fn );
void dSetDebugHandler ( dMessageFunction *fn );
void dSetMessageHandler ( dMessageFunction *fn );

サンプルコード

dSetMessageHandler( &MessageHandler );

取得

dMessageFunction *dGetErrorHandler();
dMessageFunction *dGetDebugHandler();
dMessageFunction *dGetMessageHandler();

エラーを発生させる

void dError ( int num, const char *msg, ... );
void dDebug ( int num, const char *msg, ... );
void dMessage ( int num, const char *msg, ... );

サンプルコード

dMessage( 256, " (%s:%d)", __FILE__, __LINE__ );