土曜を丸々費やして右往左往し続けて、検証アプリケーションを2つも作らされたバグが一行コメントアウトしただけで消えました。しかも、つまらないケアレスミスです。デバッグのノウハウさえあればこんな事にはならなかったはずです。
当方が持っているノウハウは、log2strという手続きを作ってoverloadし、integerもstringもbooleanもその他(tnodeとか)のものも受け取ったものは全てstringに変換して表示して、バグを探す、という手法だけです。コメントアウト、コメントアウト解除は「log2str(hoge)」を「// log2star(hoge)」に置き換える事で行っています。非常に効率が悪い(効率が悪いだけではなくどこに問題があるのかも見つけられない)のでいい加減なんとかしたいです。
私のデバッグ手法ですが、
こみいったバグは、素直に、内蔵のデバッガーを使います。
デバッグ時は、式の評価で、値を出すこともできますし、
ウォッチウインドウで、値を見ることもできます。
ローカル変数の表示ウインドウも見ることもお忘れなく。
ブレークポイントは、式の条件式を指定すれば(実行速度が遅くなりますが)、的確にブレークポイントを設定できます。
それと、上記のようなデバッグ時の関数呼び出しは、
コメントアウトせずとも、
{$IFDEF DEBUG}
log2star(hoge)
{$ENDIF}
などとして、
プロジェクトオプションで、デバッグ時にDEBUGを定義したり、はずしたりします。(再コンパイルをお忘れなきよう)
また、あと、私は、ファイルへのログ記録用のクラスを作っておき、
主要なところで、ログを出力しています。
そのクラスでは、ファイルへ出力すると同時に、OutputDebugStringで、IDEのメッセージをログウインドウに表示しておくと、実行時もそのまま見られて便利です。
IDEのデバッグ時以外に、OutputDebugStringの値を見たいときは、
DubugViewなどを使います。
http://www.microsoft.com/technet/sysinternals/utilitiesindex.msp...
原始的な方法しかおもいつきませんが取り合えず。
delphiでなくて、かなり一般的だと思ってます。
http://kakinotane.s7.xrea.com/delphi/d2/Debug.html
開発環境で、ステップ実行、ブレイクポイントの設定、
変数のウオッチとか使うと便利かと思います。
--------------------------------------------
(1)机上確認は?
(2)テストするときの範囲は?
いきなりすべてと言うのは辛いような。
部分・部分確認して、積み重ねて、最後に全体のテストなら
わかりますが。
(3)問題を発見しやすいようにロジックを書くしかないと
思います。
(4)ログを最初から埋め込んでコーディングする
関数、イベントのSTART、ENDログ、エラーログ
必要なら変数の受け渡した値を出力
(5)好みにもよりますけど
テストしたコードと実行コードが違うのは危険な感じが。
「// log2star(hoge)」に置き換えるのは私の中ではNGで
log2star(hoge)の実装を空にする。
関数を空にしても、関数コール分遅くなりますけど。
実際には、グローバルでデバッグフラグが何か持って
変数の値を変えるだけで、他は何も触らないのが理想ですが。
大きいプログラムなら、変数も変えてほしくなくて、
ログをはくかどうかは、プロパティファイルとかから
読み込んで決めてほしいような気がします。
私のデバッグ手法ですが、
こみいったバグは、素直に、内蔵のデバッガーを使います。
デバッグ時は、式の評価で、値を出すこともできますし、
ウォッチウインドウで、値を見ることもできます。
ローカル変数の表示ウインドウも見ることもお忘れなく。
ブレークポイントは、式の条件式を指定すれば(実行速度が遅くなりますが)、的確にブレークポイントを設定できます。
それと、上記のようなデバッグ時の関数呼び出しは、
コメントアウトせずとも、
{$IFDEF DEBUG}
log2star(hoge)
{$ENDIF}
などとして、
プロジェクトオプションで、デバッグ時にDEBUGを定義したり、はずしたりします。(再コンパイルをお忘れなきよう)
また、あと、私は、ファイルへのログ記録用のクラスを作っておき、
主要なところで、ログを出力しています。
そのクラスでは、ファイルへ出力すると同時に、OutputDebugStringで、IDEのメッセージをログウインドウに表示しておくと、実行時もそのまま見られて便利です。
IDEのデバッグ時以外に、OutputDebugStringの値を見たいときは、
DubugViewなどを使います。
http://www.microsoft.com/technet/sysinternals/utilitiesindex.msp...
コメント(0件)