Delphiの「範囲外のリストインデックス」エラーの場所を見つけるにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/1191604

質問

Delphi 2009では、私のプログラムは「境界外のリストインデックス」エラーを作成しました。ポップアップボックスを生成します:

alt text
(ソース: BeholdGenealogy.com)

すべてのランタイムエラーチェックがオンになっている「デバッグ」ビルド構成を使用しています。しかし、これはエラーが発生する前にキャプチャしません。

ブレークポイントを入れて試行錯誤によって絞り込むことなく、私のプログラムのこのエラーのソースを見つける簡単な方法はありますか?

役に立ちましたか?

解決

「Delphiの例外を停止する」ことはありますか? (Tools Debugger Options Language例外[Delphi7])それ以外の場合、Sourcodeで壊れません。

また、Elisterorがあなたの「例外タイプの無視する」リストにないことを確認してください。このリストは、Tools Debugger Options Language Excioncions(Delphi 7)にもあります。

他のヒント

madexcect (無料)または eurekalog (有料)支援するかもしれません。エラーが発生したときにスタックトレースを表示/電子メールで表示するために設定できます。私はすべてのプロジェクトでeurekalogを使用していますが、これらの種類のものを修正するには非常に貴重です。

ねえ、これを追跡するために追加のツールは必要ありません! :)

デバッガーでアプリケーションを実行して、「Delphiの例外を停止する」(またはDelphiのバージョンで呼ばれるもの)がターンされていることを確認してください オン.

例外が発生した場合 - デバッガーからの通知があります。 「OK」/「デバッグ」ボタンを押し、通話スタックを表示するだけです。コールスタックウィンドウは、最近のDelphiのバージョンで自動的に表示されます。表示できない場合は、「表示」/「デバッグウィンドウ」/「コールスタック」に移動します。

それで全部です。 コールスタックは、問題の正確な場所を指します. 。追加のツールは必要ありません。

ユーザー間でプログラムを配布し、クライアント側の問題に関するバグレポートを収集したい場合、これらのツール(eurekalog、JCL、またはmadexcept)が必要です。つまり、問題を確認するデバッガーはありません。

これはRTL/VCLエラーであるため、DEBUG DCU(および再構築)を有効にすると、壊れた/コールスタックの動作が改善されることがよくあります。

これが起こったときにあなたのアプリケーションが何をしているのかヒントはありますか?長いループ?ボタンクリック?

アプリケーションが停止し、コールスタックデバッグウィンドウを見ると、コードからコールバックをトレースすることができますか?コールスタックはすべての条件を通知しませんが、場所を絞り込むことができます。

通話を絞り込んだら、のようなロギングツール コードサイト 本当に便利です。たとえば、頻繁にループ制御変数をログにして、エラーの前にどの反復が発生するかを把握し、容疑者を識別する問題です。

リストボックスの場合、tstrings、...インデックスがlist-> countを超えていることを意味します。 。 tstring-> strnigs [?]の例; [?] is <0または>(tstring-> count-1)は、境界エラーから生じます。

nmpop3などについては... pop3clientを使用して電子メールを取得すると、unix/にバグがありますか? pop3サーバー、メールからメールを送信するためにそれを使用したことに出会ったのは、いくつかで大丈夫です。

ついに、TNMPOP3の代わりにTClientsocketでPOP3Clientアプリケーションを書き換える必要があります。現在、私が接続したすべてのPOP3Serverで動作します。

この助けと幸運を願っています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top