Question

J'ai besoin d'un outil qui analyse les sources C ++ et dit quel code n'est pas utilisé. La taille des sources est de ~ 500 Mo

Était-ce utile?

La solution

PC-Lint est bon. S'il doit être libre / open source, vos choix s'amenuisent. Cppcheck est gratuit et vérifie les fonctions privées non utilisées. Je ne pense pas que cela ressemble à des classes comme des classes non instanciées comme PC-Lint.

Autres conseils

Encore une fois, je vais lancer AQTime dans la discussion. A une analyse de code statique pour la plupart, sinon toutes les langues prises en charge. Je n’ai pas vraiment abordé cette partie, j’ai surtout utilisé les profileurs dynamiques (mémoire, performances, etc.).

Vous pouvez utiliser un outil de couverture de code (analyse dynamique) pour avoir une idée de ce que le code n'est pas en cours d’exécution, puis analyse manuelle pour voir si ce code est vraiment inutile.

Si vous souhaitez une analyse statique, vous avez besoin d’un outil capable de lire l’ensemble du texte. 500Mo de code source (environ 20 millions de lignes? Wow!) Et calculer un estimation prudente de ce qui est utilisé. Cela nécessite de faire un point-to analyse sur l'ensemble du système.

Voici pourquoi: si vous omettez un module Z, et décidez que FOO n'est pas utilisé, vous pourrait découvrir plus tard que Z se trouvait être celui qui utilisait FOO, ou plus subtilement, Z a copié une valeur de pointeur qui s'est avéré avoir & amp; FOO dans celui-ci à un troisième module M qui à son tour a appelé le "inutilisé" une fonction à travers le pointeur.

Cela signifie qu’aucun outil d’analyse statique qui se contente de lire les modules simples (unités de compilation) peuvent répondre à cette question en toute sécurité. Et à votre échelle, vous ne pouvez pas vous permettre de faire des erreurs stupides.

Mon entreprise, Semantic Designs, a effectué une analyse point par point pour 35 millions de systèmes de ligne. de code C à l’aide de notre boîte à outils DMS Software Reengineering. DMS peut lire de très grands systèmes de code source. Il fallait un outil personnalisé, pas tellement parce que le code source était dans un impair (archiac) dialecte de C ++ (les systèmes dans des dialectes extrêmement modernes ne peuvent pas être aussi gros, pas assez de temps pour les coder!), mais plutôt parce que dans de très grands systèmes il y a d'autres facteurs particuliers en jeu. Pour le système C que nous avons fait, il y avait un éditeur de liens dynamique personnalisé, et qui a affecté l'analyse points-à, qui à son tour a dû être personnalisé.

Parce que les systèmes de la balance dont vous parlez ont toujours des surprises comme celle-ci (BIBSEH: "Parce que dans les grands systèmes, tout se passe"), vous probablement besoin d'un outil personnalisé pour répondre à la question. DMS est conçu être personnalisé. Voir http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html et http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html

L'outil de couverture de code est ce dont vous avez besoin, mais vous devrez exécuter notre programme à travers toutes les fonctionnalités et voir ce qui est noté comme étant inutilisé. Étant donné que le code peut être une fonction exportée par DLL, vous devez vous assurer que rien ne les utilise en externe. Certains outils de couverture de code: Purify, CTC ++, Boundschecker peuvent avoir une fonctionnalité de couverture de code, si je me souviens bien, et de nombreux autres outils.

Faites très attention lorsque vous supprimez une fonction qui a été exportée sans savoir quel programme externe pourrait être lié / utilisé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top