01−00、dbg出力


CallFマクロ

プログラミングをする上で関数の戻り値をチェックし、処理が成功しているかどうかを確かめることは非常に重要です。
OpenRDBではほとんどの関数は成功すると0を返し、失敗すると1などの0以外の値を返します。
全ての関数呼び出し時に戻り値をチェックし、失敗した場合はデバッグビルドのときはassertし、リリースビルドのときはエラー終了するようにします。
これは面倒くさい作業ですが、これを怠るとプログラムが巨大になるほど、後で生じたバグの原因を把握しづらくなり開発継続が困難になってしまいます。

OpenRDBでは戻り値チェックにマクロを使います。
そのマクロがCallFです。
このマクロの定義はdisp4/INCLUDE/dbg.hにあります。

#define CallF(cfunc,f) if(cfunc){ DbgOut( L"file %s, line %d\r\n",
     __WFILE__, __LINE__ ); _ASSERT( 0 ); f; }

cfuncには関数を書き、fにはエラー時の処理を書きます。

つまり

CallF( OrgFunc01( hikisuu1, hikisuu2 ), return 1 );

と書くことは

if( OrgFunc01( hikisuu1, hikisuu2 ) ){
    DbgOut( L"file %s, line %d\r\n", __WFILE__, __LINE__ );
    _ASSERT( 0 );
    return 1;
}

と書くことと同じことになります。
マクロを使うことで面倒なチェックのための記述がシンプルになります。



DbgOut命令

CallFマクロでも出てきたDbgOutという命令は
dbg.txtというファイルに任意の文字列を出力するための関数です。
エラーの内容が一目で分かるように文字列を出力させる目的に使います。

デバッグをするときにVisualStudioでエラー場所を特定できない場合などは
このDbgOut命令を数行おきに記述して、どこまで実行出来ていてどこで止まるのかなどを絞り込むことが出来ます。


01章のトップに戻る

オープンソースのトップに戻る

トップページに戻る