2009-06-19 8 views
2

J'ai besoin d'un outil qui analyse les sources C++ et indique quel code n'est pas utilisé. La taille des sources est ~ 500mbOutil d'analyse des sources C++ (MSVC)

+0

Lol - "Analyser" signifie examiner. "Analize" signifie se transformer en anus? – rlbond

+0

> "Analize" signifie se transformer en anus? vous savez mieux – Andreo

+1

Andreo, vous devriez mettre à jour votre question pour faire référence à "couverture". Analyser (ou avec z) en se référant au code source sera probablement interprété comme une analyse statique, dont la couverture de code est une très petite partie (si elle est incluse). –

Répondre

2

PC-Lint est bon. S'il doit être libre/open source, vos choix diminuent. Cppcheck est gratuit et vérifie les fonctions privées inutilisées. Je ne pense pas qu'il cherche des choses comme des classes non instanciées comme PC-Lint.

+0

il peut être commercial – Andreo

-2

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 considéré comme inutilisé. Puisque le code pourrait être des fonctions exportées de DLL, vous devrez 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 un tas d'autres outils.

Faites très attention à la suppression de toute fonction qui aurait pu être exportée sans savoir quel programme externe est susceptible de le lier/d'utiliser.

+0

Je pense que la couverture de code est différente de ce que j'ai lu la question originale à être - qui est l'analyse statique du code qui ne peut jamais être appelé. – Tim

+0

@AlexC, La couverture de code fait référence à la quantité de votre code qui est exercée par les tests que vous avez exécutés. –

+0

Peut-être que vous avez manqué le point de mon message, si le code C++ compile à une DLL, il n'y a aucun moyen de savoir ce qui appelle ce code sauf si vous avez accès à tout le code qui peut y accéder. L'utilisation d'un outil de couverture de code lors de l'utilisation du système peut aider à déterminer ce qui est appelé via l'interface DLL exportée dont l'analyse d'état risque de ne pas être détectable (surtout si elle est liée dynamiquement par nom ou ordinal). – AlexC

0

Encore une fois, je vais jeter AQTime dans la discussion. A l'analyse de code statique pour la plupart, sinon la totalité, des langues prises en charge. Je ne suis pas vraiment allé dans cette partie, j'ai principalement utilisé les profileurs dynamiques (mémoire, performance, etc.).

0

Vous pouvez utiliser un outil de couverture de code (analyse dynamique) pour avoir une idée du code en cours d'exécution, puis analyser manuellement pour voir si ce code est vraiment inutile.

Si vous voulez une analyse statique, vous avez besoin d'un outil qui peut lire l'intégralité 500Mo de code source (est. 20 millions de lignes? Wow!) Et calculer une estimation prudente de ce qui est utilisé. Cela nécessite une analyse des points à sur l'ensemble du système.

Voici pourquoi: Si vous laissez un module Z, et décider que FOO est utilisé, vous trouverez peut-être plus tard que Z est arrivé à être celui qui a utilisé FOO, ou plus subtilement, Z copié une valeur de pointeur il s'est trouvé & FOO dedans à un troisième module M qui à son tour a appelé la fonction "inutilisée" à travers le pointeur. Cela signifie qu'aucun outil d'analyse statique qui lit uniquement modules simples (unités de compilation) ne peut répondre à cette question en toute sécurité. Et à votre échelle, vous ne pouvez pas vous permettre de commettre des erreurs stupides. Ma société, Semantic Designs a effectué des analyses de points pour l'analyse de 35 millions de systèmes de ligne de code C en utilisant notre DMS Software Reengineering Toolkit. 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 dialecte bizarre (archiac) de C++ (les systèmes dans les dialectes extrêmement modernes ne peuvent pas être aussi grands, pas assez de temps pour les coder!), Mais plutôt parce que dans les très grands systèmes il y a d'autres facteurs particuliers en jeu. Pour le système C que nous avions, , il y avait un éditeur de liens dynamique personnalisé, qui affectait l'analyse des points à , qui à son tour devait être personnalisée. Parce que les systèmes de l'échelle dont vous parlez ont toujours des surprises comme celle-ci (BIBSEH: "Parce que dans les gros systèmes, tout arrive"), vous aurez probablement besoin d'un outil personnalisé pour répondre à la question. DMS est conçu pour être personnalisé. Voir http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html et http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html

Questions connexes