エラー箇所を特定するなどデバッグの方法

解決


サンデープログラマー  2006-06-26 10:40:00  No: 22277  IP: 192.*.*.*

Delphi6 Personal  +XP  で試作しています。初歩的な質問で申し訳ありませんがご指導ください。

ほとんどの場合上手く動いているのですが読み込むデータにより時たま’06は整数ではありません’のようにメッセージがでて突然止まってしまいます。  ファイルが悪いのかと思って何度もチェックしてみましたがファイルに異常はなくどこかの計算過程(かなり膨大)で出ているようです。  どこの行か、または何の変数が問題なのか特定できずに開発が止まってしまいました。

このような時に問題がある変数は何なのか、あるいはどこの行か、などどのようにエラー原因を特定していくのか方法をご指導ください。

編集 削除
igy  2006-06-26 13:34:26  No: 22278  IP: 192.*.*.*

文字列を整数に変換する箇所(たとえば、StrToInt 関数)で
例外が発生しているとか?

編集 削除
HOta  2006-06-26 13:43:50  No: 22279  IP: 192.*.*.*

’06は整数ではありません’のエラーから類推すると、
文字列変数から整数に変換しているStrToInt関数などが
考えられます。
動作をデーターを読み込む場合に起こっているものと考えると、
このルーチンの適当な場所に、ブレークポイントを置き、
ステップ実行やトレース実行でエラーを起こす場所まで動かして、
特定します。

編集 削除
灼熱  2006-06-27 11:52:39  No: 22280  IP: 192.*.*.*

こんにちわ。
下記のような感じでいかかでしょうか?
Hensu[I]に、変なのが入ってたら、どの場所か
特定できるのでは?
try
  for I:=1 to 100
    ErrorIdx := I;
    Kazu := StrToInt(Hensu[I]);
  end;
except
  on E:Exception do begin
    ShowMessage(StrToInt(ErrorIdx) + ' でエラー');
  end;
end;

編集 削除
サンデープログラマー  2006-06-28 17:34:29  No: 22281  IP: 192.*.*.*

皆様  ご親切にアドバイスを頂きありがとうございました。

やはりインタプリータではないのでエラー行や変数名を抽出するのは無理であることがわかりました。かなりの手間となることは予想されますがブレークポイントとかTry  Exceptなどで地道につぶしていくことにします。経験を積んでデバッグのスキルを高めることを心掛けます。本当は簡単にできることが自分だけ苦労しているのではないか?などと思って質問させていただきましたがこれで地道な方法に挑戦する心構えができました。インターネット環境から離れていたため投稿が遅れましたことをお詫びします。

編集 削除