delphiのデバッグに関するノウハウがまったくありません。どうやりますか?どこかにありますか?教えてください。





土曜を丸々費やして右往左往し続けて、検証アプリケーションを2つも作らされたバグが一行コメントアウトしただけで消えました。しかも、つまらないケアレスミスです。デバッグのノウハウさえあればこんな事にはならなかったはずです。

当方が持っているノウハウは、log2strという手続きを作ってoverloadし、integerもstringもbooleanもその他(tnodeとか)のものも受け取ったものは全てstringに変換して表示して、バグを探す、という手法だけです。コメントアウト、コメントアウト解除は「log2str(hoge)」を「// log2star(hoge)」に置き換える事で行っています。非常に効率が悪い(効率が悪いだけではなくどこに問題があるのかも見つけられない)のでいい加減なんとかしたいです。

回答の条件
  • 1人2回まで
  • 登録:2007/10/06 22:30:46
  • 終了:2007/10/12 13:14:59

ベストアンサー

id:toby No.2

はなげ回答回数12ベストアンサー獲得回数12007/10/07 19:35:47

ポイント65pt

私のデバッグ手法ですが、


こみいったバグは、素直に、内蔵のデバッガーを使います。

デバッグ時は、式の評価で、値を出すこともできますし、

ウォッチウインドウで、値を見ることもできます。

ローカル変数の表示ウインドウも見ることもお忘れなく。

ブレークポイントは、式の条件式を指定すれば(実行速度が遅くなりますが)、的確にブレークポイントを設定できます。


それと、上記のようなデバッグ時の関数呼び出しは、

コメントアウトせずとも、

{$IFDEF DEBUG}

log2star(hoge)

{$ENDIF}

などとして、

プロジェクトオプションで、デバッグ時にDEBUGを定義したり、はずしたりします。(再コンパイルをお忘れなきよう)



また、あと、私は、ファイルへのログ記録用のクラスを作っておき、

主要なところで、ログを出力しています。


そのクラスでは、ファイルへ出力すると同時に、OutputDebugStringで、IDEのメッセージをログウインドウに表示しておくと、実行時もそのまま見られて便利です。

IDEのデバッグ時以外に、OutputDebugStringの値を見たいときは、

DubugViewなどを使います。

http://www.microsoft.com/technet/sysinternals/utilitiesindex.msp...

その他の回答(2件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402007/10/06 22:57:43

ポイント25pt

原始的な方法しかおもいつきませんが取り合えず。

delphiでなくて、かなり一般的だと思ってます。

http://kakinotane.s7.xrea.com/delphi/d2/Debug.html

開発環境で、ステップ実行、ブレイクポイントの設定、

変数のウオッチとか使うと便利かと思います。

--------------------------------------------

(1)机上確認は?

(2)テストするときの範囲は?

  いきなりすべてと言うのは辛いような。

  部分・部分確認して、積み重ねて、最後に全体のテストなら

  わかりますが。

(3)問題を発見しやすいようにロジックを書くしかないと

  思います。

(4)ログを最初から埋め込んでコーディングする

  関数、イベントのSTART、ENDログ、エラーログ

  必要なら変数の受け渡した値を出力

(5)好みにもよりますけど

  テストしたコードと実行コードが違うのは危険な感じが。

  「// log2star(hoge)」に置き換えるのは私の中ではNGで

   log2star(hoge)の実装を空にする。

  関数を空にしても、関数コール分遅くなりますけど。

  実際には、グローバルでデバッグフラグが何か持って

  変数の値を変えるだけで、他は何も触らないのが理想ですが。

  大きいプログラムなら、変数も変えてほしくなくて、

  ログをはくかどうかは、プロパティファイルとかから

  読み込んで決めてほしいような気がします。

id:toby No.2

はなげ回答回数12ベストアンサー獲得回数12007/10/07 19:35:47ここでベストアンサー

ポイント65pt

私のデバッグ手法ですが、


こみいったバグは、素直に、内蔵のデバッガーを使います。

デバッグ時は、式の評価で、値を出すこともできますし、

ウォッチウインドウで、値を見ることもできます。

ローカル変数の表示ウインドウも見ることもお忘れなく。

ブレークポイントは、式の条件式を指定すれば(実行速度が遅くなりますが)、的確にブレークポイントを設定できます。


それと、上記のようなデバッグ時の関数呼び出しは、

コメントアウトせずとも、

{$IFDEF DEBUG}

log2star(hoge)

{$ENDIF}

などとして、

プロジェクトオプションで、デバッグ時にDEBUGを定義したり、はずしたりします。(再コンパイルをお忘れなきよう)



また、あと、私は、ファイルへのログ記録用のクラスを作っておき、

主要なところで、ログを出力しています。


そのクラスでは、ファイルへ出力すると同時に、OutputDebugStringで、IDEのメッセージをログウインドウに表示しておくと、実行時もそのまま見られて便利です。

IDEのデバッグ時以外に、OutputDebugStringの値を見たいときは、

DubugViewなどを使います。

http://www.microsoft.com/technet/sysinternals/utilitiesindex.msp...

id:minkpa No.3

minkpa回答回数4178ベストアンサー獲得回数552007/10/08 18:50:41

ポイント10pt

http://0xcc.net/blog/archives/000161.html

こちらは悪いノウハウについての解説です。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません