バグの予防とデバッグ

UNIX 環境を対象とした、 バグのないプログラムを書くための実践的なテクニック。


コンパイラの警告を活用せよ

コンパイラを使うときに
cc -Aa +w1 (HPUX 標準のコンパイラ)
gcc -Wall (gcc を使う場合)
というオプションをつけてコンパイルしてください。

いくつか Warning (警告)が出ると思います。 なるべく警告が出ないようにプログラムを直してください。


assert を使え

#include <assert.h>
/*
 * int assert(int expression);
 *    このマクロは、プログラムに診断を挿入するとき有効です。
 *    実行中に expression が偽(ゼロ)になった場合、 assert() は、
 *    標準エラー出力にエラーを表示し、強制終了します。
 *    -DNDEBUG を指定してコンパイルすると、アサーションは
 *    プログラムにコンパイルされません。
 */

DEBUG 用コードを使え

上記の assert() と併用して、プリプロセッサを次のように
使うと便利です。

/*
 * NDEBUG と反対の意味を持つシンボル DEBUG の定義
 */
#ifdef NDEBUG
#  undef DEBUG
#else
#  define DEBUG
#endif

プログラムの中では次のように使用します。

#ifdef DEBUG
    ここに挟まれた部分はデバッグ時のみ実行されます。
#endif
 
デバッグが終わったら -DNDEBUG を指定してコンパイルします。


デバッグ・テスト


参考文献: S.Maguire著, 関本健太郎訳
「ライティング ソリッドコード」 Microsoft Press アスキー出版局
Takuya NISHIMOTO
Last modified: Sat Oct 25 16:20:20 1997