68user's page 掲示板

Prev< No. 3556> Next  [最新発言に戻る] [過去ログ一覧]
No. 3556 # 68user 2004/02/16 (月) 10:23:10
>>3555 瀧上
> 上記以外に一般的な(適切)な方法があるなら教えて下さい。
しょせん決め事なので、一般解はありませんが、
      - コマンドオプション (--debug や -d など) を指定する
      - make debug で、デバッグ用バイナリを生成する
      - make install すると ~/bin/ に通常バイナリを、~/bin/debug/
          にデバッグ用バイナリを格納する
などの方法があります。

どれでもいいので、いずれかをプロジェクトのルールとして決定して
おくのがよいでしょう。

わたしの場合、
        「デバッグモードは開発時のためのモードではなく、通常運用時や
            後々のバグ追及時にこそ有用なもの」
という考え方なので、わたしが好む方法は以下の通りです。

      - デバッグモードを実装する。デバッグモードの場合、rollback
          するなどして、データを一切更新しないようにする (まわりの環境に
          一切影響を与えない)
      - デバッグモードとは別に、冗長なメッセージを出すだけの冗長
          モード (verbose モード) を実装する。冗長モードの場合は、
          通常どおりデータを更新する。
      - エラー発生に気づきやすいよう、ログに吐いたメッセージは
          標準出力・標準エラー出力にも吐くようにする。
      - オプションでデバッグモード・冗長モードを切り替えられること。
          例えば --debug でデバッグモード、--verbose で冗長モード、など。
          デバッグモードの場合、自動的に冗長モードも有効にするようにする。

コード例は以下の通り。

          int debug_flg = 0;
          int verbose_flg = 0;
          for ( i=1 ; i<argc ; i++ ){
                  if ( strcmp(argv[i], "--debug") == 0 ){
                          debug_flg = 1;
                          verbose_flg = 1;
                  }
                  if ( strcmp(argv[i], "--verbose") == 0 ){
                          verbose_flg = 1;
                  }
          }

          /* こんな感じで各種情報を出力 */
          verbose("ほげほげ foo=[%d]", foo);

          ....
          if ( debug_flg ){
                  EXEC SQL ROLLBACK RELEASE WORK;
          } else {
                  EXEC SQL COMMIT RELEASE WORK;
          }

          void
          verbose(char *fmt, ... ){
                  va_list ap;
                  char buf[8192];

                  /* verbose モードでなければ、何もしない */
                  if ( ! verbose_flg ){ return; }

                  va_start(ap, fmt);
                  vsnprintf(buf, sizeof(buf-1), fmt, ap);
                  va_end(ap);

                  fprintf(stderr, "debug: %s", buf);
          }

使い方としては、
      - 単に詳細なメッセージを表示したい場合は冗長モードを使う。
      - まわりの環境に影響を与えず、とりあえずうまく動くか確かめたい
          場合はデバッグモードを使う。
となります。


> UNIXの環境構築
UNIX の環境構築と言っても範囲が広すぎるので、なんともいえません。

> ジョブスケジューラにおけるNET設計
これは何でしょうか? JP1 とかの話?

Prev< No. 3556> Next  [最新発言に戻る] [過去ログ一覧]