1

Turbo Explorer 2006 (update 2) を使用していますが、特にクラス補完を使用しようとすると、特定のユニットで IDE がクラッシュすることがあります。ユニット (およびプロジェクト全体) は運用中であり、何年もの間正常に動作しており、毎日の変更により、失敗するのは IDE ツールだけです。

通常、これが発生した場合、Delphi はクラッシュに耐えますが、IDE の一部が機能しなくなります(たとえば、ユニットが .dpr にない式のツールチップのデバッグ値)。

このユニットはシステムの巨大な配電盤であるため、おそらく ifdef された何らかの特定の構造でパーサーが死んでいると思われます。

sb は IDE を強制終了する特定の構造を認識していますか? クラス補完を再び使用できるように、これを修正したいと思います。

4

4 に答える 4

1

Delphi IDE と(それほどではありませんが)コンパイラは非常に壊れやすいものです。多くの予期しない構造は、奇妙な問題を引き起こします。したがって、あなたのケースで何が問題なのかをすぐに推測するのは簡単ではありません。(あなたがあなたのユニットを説明する方法では、IFDEF が役割を果たしているのではないかと思います。)

問題がなくなるまでコードの一部をコメントアウトして、原因を確認できませんか? あなたのユニットが の場合はA B C D、試してみてください

(* A B *) C D

それでもエラーが発生しない場合は、試してください

A B (* C D *)

それなら多分

(* A *) B (* C D *)

あなたのユニットの小さな縮小不可能な部分だけが残るまで。コンパイラではなく IDE をテストしているので、エラーなしでコンパイルするためにコメントアウトされたユニットはおそらく必要ありません。

于 2010-06-21T10:46:44.433 に答える
1

[デルファイ ターボ「クラス完了」クラッシュ] をグーグル検索すると、あなたが見ているのと同じ問題のように聞こえるバグ レポートが見つかりました。バグレポートには、少なくともその特定のテストケースについて、回避策 (»「TTest」を「TButton」に変更し、「TButton = class(TTest)」を削除します。«) がリストされていますが、あなたのケースに適用できるかどうかはわかりません。 .

于 2009-06-29T10:56:07.567 に答える
1

動的多次元配列でいくつかの問題がありました。

type
  Foo = array of array of Integer;

コード補完とリファクタリングが機能せず、 ; に関するエラーが発生しました。その宣言のどこかで期待されていましたが、問題なくコンパイルされました。

型宣言を次のように変更して修正しました。

type
  Foo = array of TIntegerDynArray; //TIntegerDynArray is declared in Types unit
于 2009-06-29T13:02:46.767 に答える
0
{$ifdef something}
   type myclass = class
{$else]
   type myclass = class(existingclass);
{$endif}

混乱しているようですが、クラッシュしません。

また、プロパティ宣言の ifdef はシステムを混乱させるようです。

D2009では、

type myrecord = record someting : set of 0..31; 終わり;

完了を妨げているように見えましたが (SET についてつぶやきます)、クラッシュはしませんでした。

アップデート

これは、補完が処理できない「のセット」構造自体です(コンパイラは処理できますが)

更新 2 : プロパティ宣言の IFDEF も、IDE を混乱/クラッシュさせます。

于 2009-07-07T12:21:27.823 に答える