Delphiの「範囲外のリストインデックス」エラーの場所を見つけるにはどうすればよいですか
-
19-09-2019 - |
質問
Delphi 2009では、私のプログラムは「境界外のリストインデックス」エラーを作成しました。ポップアップボックスを生成します:
(ソース: BeholdGenealogy.com)
すべてのランタイムエラーチェックがオンになっている「デバッグ」ビルド構成を使用しています。しかし、これはエラーが発生する前にキャプチャしません。
ブレークポイントを入れて試行錯誤によって絞り込むことなく、私のプログラムのこのエラーのソースを見つける簡単な方法はありますか?
解決
「Delphiの例外を停止する」ことはありますか? (Tools Debugger Options Language例外[Delphi7])それ以外の場合、Sourcodeで壊れません。
また、Elisterorがあなたの「例外タイプの無視する」リストにないことを確認してください。このリストは、Tools Debugger Options Language Excioncions(Delphi 7)にもあります。
他のヒント
ねえ、これを追跡するために追加のツールは必要ありません! :)
デバッガーでアプリケーションを実行して、「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で動作します。
この助けと幸運を願っています