6
votes

Trouver toutes les erreurs de compilation dans un projet DELPHI

Je fais un peu de refactoring de mon projet Delphi. Je veux pouvoir faire une modification, puis voir tous les les endroits du projet qui se brisent en raison de ce changement. Semblable à la manière dont Eclipse répertorie toutes les erreurs de compilation pour un projet (en Java).

à Delphi, je peux faire un changement, puis recompiler mon projet, mais le compilateur s'arrête lorsqu'il trouve la première unité qui ne compile pas. Je dois réparer cette unité, compiler à nouveau, qui me montrera ensuite l'erreur suivante, etc., etc.

Je veux pouvoir voir tous les les erreurs de compilation dans le projet à la fois. Ensuite, je peux décider si le changement vaut la peine de faire ou non. Par exemple, si le changement nécessitera la fixation des mains de 50 fichiers source distincts, cela ne vaut pas la peine de faire. Mais si cela ne casse que 2 fichiers, c'est un changement facile à faire.

Y a-t-il un moyen de le faire à Delphi? Puis-je dire au compilateur de continuer à aller même après avoir trouvé une unité qui ne compile pas?

J'utilise Delphi 2010


0 commentaires

4 Réponses :


5
votes

Il n'y a aucun moyen de le faire avec le compilateur Delphi, mais si vous envisagez de faire une modification d'une partie de l'interface publique d'une unité, vous pouvez utiliser les outils de refactoring qui viennent avec l'EDI pour trouver toutes les références à toutes les références. Il est sur le point de changer avant de le changer, ce qui vous donnera les informations que vous recherchez.


6 commentaires

J'aimerais utiliser les outils de refactorisation pour cela. Malheureusement, ils ne travaillent pas dans différents projets dans le même groupe de projet. Ils refacteurs dans le même projet, mais toutes les unités d'autres projets utilisant cette unité ne seront pas modifiées.


@awmross: ah. Vous n'avez pas mentionné le projet groupes dans votre question.


J'utilise D2009 et utilise des refacteurs. Pour autant que je puisse dire, ils travaillent à travers des projets dans un groupe de projet (à condition que vous disposiez du groupe ouvert bien sûr). Lorsque je renomme une classe ou une méthode dans une unité partagée, toutes ses références sont modifiées dans tous les projets. Certes, j'utilise surtout les refacteurs "Rename" ... Je ne sais pas sur les autres.


@Marjan: Je n'ai jamais reçu cela pour travailler en 2006 ni 2010. Ajoutez-vous les classes renommées aux autres fichiers de projet? Ou sont-ils juste sur le chemin de recherche de ces projets? Et "Trouvez des références" travaille également à travers des projets (cela ne signifie pas pour moi). Nous avons notre projet "Bibliothèque" installé comme une bibliothèque de temps de conception. Peut-être que c'est le problème.


Euh, oui, j'ai ajouté des unités partagées à chaque projet qui l'utilise. Je n'utilise pas le chemin de la bibliothèque pour "propre" code, uniquement pour les bibliothèques tiers. C'est un peu de travail supplémentaire, mais cela rend les dépendances explicites et contribue à éviter les problèmes causés par une utilisation implicite de «vieux» de DCU sur le chemin de la bibliothèque. Ah, et cela aide également lorsque vous avez le même nom d'unité avec un contenu différent pour différents projets. Utile pour le code spécifique du projet utilisé par une unité partagée. L'unité partagée utilise simplement "Unit1" et la DPR dit lequel. Plus explicite et moins d'erreur éduque que d'utiliser le chemin de la bibliothèque.


Trouvez des références Now Works, après avoir ajouté toutes les unités à tous les fichiers de projet du groupe de projet.



0
votes

Le compilateur Delphi déjà essaie pour compiler autant que possible.
Malheureusement, très souvent, une erreur est suffisamment essentielle pour empêcher le compilateur de passer au-delà de l'erreur, car il ne peut pas faire de supposer que le code devrait être compilable.

En outre, très souvent, les erreurs qu'un compilateur peut donner après que la 1ère erreur a été rencontrée ne soit pas fiable et peut même disparaître après la correction de la 1ère erreur. (été témoigné par toutes les lignes brillantes rouges apparaissant et disparaissant lorsque vous tapez)

Qu'est-ce que le compilateur est toutefois de fournir toutes les indications et avertissements (qui sont appelés erreurs pour d'autres compilateurs).


2 commentaires

Je ne suis pas sûr que cela soit impossible, compte tenu des autres langues parviennent à le faire. Peut-être que Delphi (la langue) est peut-être impossible de construire un compilateur qui fait cela.


Delphi a un compilateur à passe unique. C'est pourquoi il est si rapide, mais aussi pourquoi certaines erreurs ne sont que terminales. Comme je l'ai déjà dit, cela peut dans certains cas trouver plus d'une erreur.



5
votes

Les unités Delphes, en tant que fonctionnalité de modularité, sont conceptuellement à un niveau similaire aux jarres Java ou à des assemblages .NET; ils compilent pour chaque fichier. Dans Ni Java NOR .NET, vous pouvez compiler des modules dépendants lorsque vous souhaitez compiler des erreurs dans un module référencé.

La raison pour laquelle ils sont plus granulaires que les assemblages .NET etc. doivent à leur histoire. Ils ont été conçus en partie autour de l'architecture X86 segmentée; Les données associées à une seule unité n'ont pas pu être supérieures à 64 Ko. De même, des unités ont servi de division naturelle entre le code proche et le code éloigné. Si vous êtes familiarisé avec 16 bits X86, vous saurez que les pointeurs de loin des données ont nécessité une valeur pour le segment ainsi que le décalage, tandis que près de données ne nécessitait qu'une compensation. Appeler près du code était également plus rapide que d'appeler le code FAR. Les programmes étaient également plus petits et moins complexes à l'époque; L'unité était une granularité raisonnable du module pour un comportement de tout sous-système. C'est beaucoup moins le cas aujourd'hui.


4 commentaires

Intéressant. Ainsi, en d'autres termes, si j'avais toutes mes classes dans une grande unité, au lieu de mettre chaque classe dans une unité distincte, je pouvais voir toutes les erreurs de l'unité à la fois. Comme vous l'avez fait allusion, cela n'est pas vraiment pratique pour la taille des projets que nous faisons aujourd'hui (était-ce jamais?). Je n'ai certainement jamais vu de java jar qui avait toute sa source dans un fichier .java!


@awmross: intéressant, mais mal. Eclipse peut afficher toutes les erreurs dans tous les fichiers Java. Delphi pourrait évidemment le faire aussi, au moins comme il y a des erreurs dans la pièce de la pièce uniquement. Même des erreurs dans la partie interface n'empêche pas la compilation des unités qui ne dépendent pas de l'unité erronée. La vraie raison est probablement que les développeurs Delphes ne voyaient pas cette fonctionnalité aussi utile.


@maartinus - Je ne pense pas que ce soit une question de ne pas être considérée comme utile, plus que cela soit considéré comme utilisé moins . par exemple. Tout C # Devoper vous dira que lorsque vous avez une défaillance de la compilation dans un assemblage dans une solution qui conduit très souvent à une cascade d'erreurs à la suite de cette assemblée non disponible. Donc, vous commencez avec plus de 200 erreurs à résoudre, mais si vous corrigez la première erreur de compilation, Toutes les erreurs 200+ sont résolues. Quelle indication significative a vraiment été fournie par ces erreurs de 200+ -1? Occupations lorsque> 1 erreur est utile peut exister, mais sont très rares et bien entre.


@Deltics, il n'est pas utile que pour les personnes ne faisant aucun refactoring. Parfois, je veux changer quelque chose et avoir besoin de voir combien de travail cela implique. Avec un bon compilateur, je reçois quelque chose de zéro à des centaines d'erreurs. S'il y a des centaines, alors j'essaye une manière différente. S'il y en a quelques-uns, je peux les regarder et voir à quel point ils sont difficiles à réparer. Et oui, en Java, je l'utilise peut-être tous les deux jours. +++ Les erreurs dans Eclipse ne sont pas cascades. Supprimer des méthodes de pause variable en l'utilisant, mais c'est tout. Les utilisateurs des méthodes cassées ne montrent aucune erreur et c'est une bonne chose!



0
votes

Vous pouvez utiliser Ctrl-Shift-entrer pour voir toutes les occurrences de la variable, de la propriété, de la méthode ou de WahTever actuellement sous le curseur. Avec ces informations, vous pouvez décider de faire vos modifications ou non.

hélas, avec la version actuelle, cette fonctionnalité ne fonctionne pas aussi fiable que cela devrait.


0 commentaires