Index: [Article Count Order] [Thread]

Date:  Thu, 30 Aug 2001 13:15:40 +0900
From:  Kenji Hiranabe <hiranabe@....jp>
Subject:  [XP-jp:02399] Re: バグ・パターン
To:  extremeprogramming-jp@....jp
Message-Id:  <20010830131540Z.hiranabe@....jp>
In-Reply-To:  Your message of "Thu, 30 Aug 2001 03:11:50 +0900"	<200108291807.DAA26000@....jp>
References:  <200108291807.DAA26000@....jp>
X-Mail-Count: 02399

平鍋です.

On Thu, 30 Aug 2001 03:11:50 +0900,
Kanju <kanju@....jp> said:

 > あ、悔しい。
 > 作ろうと思っていたのに。
 > 誰でも思いつくようなものですから、やったもん勝ちですね。
 > こっちのはまだ冗談みたいなのしか入ってませんし。

 > http://mono-ki.hoops.ne.jp/diary/txt/computer/debugpatern.html

おもしろいですね.
パターンにはならないかもしれませんが,私が思い付くデバッグテ
クニックを列挙してみます.

・告白デバッグ:
人に横についてもらい,説明する.「こうして,ああして,こうな
るでしょ,こうなるはずなのに,なんでかな〜,...あ,そう
か!」

・机上デバッグ:
紙に印刷し,赤ペンを持ってソースを精読する.

・ステップデバッグ:
デバッガでステップ実行する.

・プリントデバッグ:
プリント文を入れまくる.

・バイナリサーチ・プリントデバッグ:
デバッグプリントを入れる際に,バグがありそうな箇所の中間地点に入
れる.そして前か後かを切り分ける.これを再帰的に繰り返す.

・assert デバッグ:
ここでは,こうなっているハズ,ここでは,こう,と,頭の中の仮
定を assert 文で埋め込んで行く.(マルチスレッドだと,これが
ないとキツイですよね)

・ctrace デバッグ:
C 言語コードなら,ctrace 通して,全ステートメントをプリントしな
がら走らせる.

・truss デバッグ:
UNIX で truss を使って走らせる.システムコールに入るところで
ログが取れる.

・lint デバッグ:
C言語なら,まずは static な lint チェックをする.
gcc なら -Wall する, -ecpp (Effective C++ rule check)する.

・メモリ関係デバッグ:
C/C++ なら,デバッグ用 malloc/new を使う.
free/delete 後にポインタに 0 を代入する.
お金があるなら,purify を使う.

・ユニットテストデバッグ:
バグを再現するユニットテストを書く.大きいプログラムだと,
ここまで来れば,ほぼ解決したも同然.

以上