デバッグ ブレークポイントは、システムの他の 38 ユニットすべてで正常に動作します。しかし、+- 10.000 行の DataModule では、F9/F8/F7 で起動した後に Delphi が無効になります。そのユニットのソースのどの部分でも、OnCreate、SQLConnection.Active:=true などの義務的な手順であっても詳細: +- 20 日前までは正常に動作します。私はD7を使用しており、コンポーネントのすべてのソースも持っています。ありがとうフェリペ
6 に答える
フル ビルド (Shift+F9) を実行してみてください。それがうまくいかない場合、以下のコードでブレークポイントをシミュレートするとどうなりますか?
asm int 3 end;
データモジュールのソース ファイルの複数のコピーを確認します。実行していると思われるコードが、コンパイラやデバッガが認識しているコードと異なる場合があります。
次に、コードのデバッグを {$D-} または {$DEBUGINFO OFF} で誤ってオフにしていないことを確認してください。これにより、1 つのユニットのデバッグ情報をオフにすることができます。
また、[ツール]、[オプション]、[デバッガ オプション] で [統合デバッグ] が有効になっていることを確認してください。他の場所をデバッグできると言ったのは知っていますが、統合されたデバッグが何らかの形で誤ってオフにされていないことを確認することは害にはなりません.
この問題を発見しました。タイプ TDM=class(TDataModule) とプライベート セクションの間でインターフェイス クラス セクションのフィールド数を制限するのは、Delphi7 の奇妙な動作です。いくつかのフィールド (DataSet フィールド (+-40 フィールド)) を削除し、degub を再度実行しました。これらのフィールドを再度追加すると、デバッグが実行されません。どのコンポーネント フィールドを削除したかは問題にならないため、これが限界だと確信しています。さまざまなテーブルからもいくつかのフィールドを試し、追加、テスト、削除しました。残念ですが、本当です...助けてくれてありがとう。
古いD7では、非常に大きなファイルのデバッグにバグがあったという漠然とした記憶があります。大きなユニットをいくつかのクラスに分けて、ユニットの外部でデバッグできるかどうかを確認してください。もう1つのオプションは、デバッグするセクションを除いて、大きなファイルのdebuginfoをオフにすることです。試してみる価値があります。
フェリペ、メモリに移動したり、メモリから移動したりしているdllでデバッグできないユニットですか?dllをデバッグするときに、別のdllでコードを実行したり、問題のあるユニットが含まれているdllをアンロードしたりする実行可能ファイルで何かを実行すると、Delphiはすべてのブレークポイントを無効にすることがわかりました。通常、Delphiを再起動し、問題のあるユニットのdllの単一インスタンスをメモリに保持することが、この問題の唯一の解決策です。
私は定期的にデバッグする17kラインユニットを持っているので、サイズが問題になるとは思えません。
少し前に Steve Trefethenからのブログ投稿があり、いくつかの考えられる理由を説明していますが、他のユニットをデバッグできると言うなら、それらが当てはまるとは思えません。
Delphi 5 の大きな DataModule で同じ問題があり、デバッグできませんでした。ファイルが大きすぎてデバッグできず、Delphi がそれを好まなかったことが原因でした。Delphi 2007 に移行すると、再びデバッグできるようになりました。理由はわかりませんが、何も変更されていません (コードに関して)。