2009-06-29 7 views
1

J'utilise Turbo Explorer 2006 (mise à jour 2), et parfois l'IDE se bloque dans une certaine unité, spécialement quand j'essaie d'utiliser la classe-complétion. L'unité (et le projet entier) sont en production et fonctionnent correctement depuis des années, avec des modifications quotidiennes, ce sont les outils IDE qui échouent.Constructions connues qui plantent l'IDE Delphi

Habituellement, si cela se produit, Delphi survit à l'accident, mais certaines parties de l'IDE sont disparu (par exemple les valeurs de débogage dans les infobulles pour les expressions dont l'unité est pas dans le .dpr)

Je soupçonne que l'analyseur meurt sur certains construction spécifique, probablement quelque chose d'ifdef'ed, puisque cette unité est un énorme standard de systèmes.

Est-ce que sb connaît des constructions spécifiques qui détruisent l'EDI? Je voudrais résoudre ce problème pour pouvoir réutiliser la classe.

Répondre

1

Recherche sur Google pour [crash d'achèvement de classe delphi turbo] situé a bug report with what sounds like the same problem you are seeing. Le rapport de bug répertorie une solution de contournement (») Remplacez "TTest" par "TButton" et supprimez le "TButton = class (TTest)". «), au moins pour son testcase donné, mais je ne sais pas si c'est applicable dans votre cas .

0

J'ai eu quelques problèmes avec un tableau multidimensionnel dynamique:

type 
    Foo = array of array of Integer; 

complétion de code et refactoring ne fonctionne pas, il a donné une erreur au sujet d'un; attendu quelque part dans cette déclaration, mais il compilé très bien.

Je l'ai fixé par la déclaration de Sa modification de type à ceci:

type 
    Foo = array of TIntegerDynArray; //TIntegerDynArray is declared in Types unit 
+0

Oui, j'en ai vu un aussi. C'est un refus, et pas un accident si –

+0

Presque chaque déclaration "complexe" fait btw. champ xxx: ensemble de (x, y, z); refuse également de compléter –

0
{$ifdef something} 
    type myclass = class 
{$else] 
    type myclass = class(existingclass); 
{$endif} 

semble confondre, mais ne plantera pas.

De même, ifdef dans les déclarations de propriétés semble perturber le système.

Dans D2009,

Type MyRecord = fiche someting: ensemble de 0..31; fin;

semble inhiber l'achèvement (il marmonne à propos de SET), mais pas de crash.

mise à jour

Il est « un ensemble de » se construire l'achèvement ne peut pas gérer (alors que le compilateur peut)

+1

Peut-être un tel ifdef confond l'IDE, et beaucoup de tels ifdefs le planterait? – user192472

0

Le compilateur IDE Delphi et (dans une moindre mesure) sont très fragiles . Beaucoup de constructions non-attendues vont causer des problèmes étranges. Il n'est donc pas facile de deviner quel est le problème dans votre cas. (La façon dont vous décrivez votre unité, je suppose que les IFDEF peuvent jouer un rôle cependant.)

Vous ne pouvez pas commenter des parties sur le code jusqu'à ce que le problème disparaisse, pour voir ce qui peut le provoquer?Si votre appareil est A B C D, essayez avec

(* A B *) C D 

et si cela ne cause aucune erreur, essayez

A B (* C D *) 

alors peut-être

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

etc., jusqu'à ce qu'une petite partie non réductible de votre unité restes. Puisque vous testez l'EDI et non le compilateur, vous n'avez probablement pas besoin de votre unité commentée pour compiler sans erreur.

+0

J'ai essayé. (et j'ai une certaine expérience dans la réduction de code), mais je n'ai pas eu des cas de coupures très claires. Juste les intuitions que j'ai déjà décrites. Je soupçonne qu'un ifdef dans une déclaration de propriété a causé l'accident, mais je ne pouvais pas l'obtenir dupliqué dans l'isolement –