10
votes

Analyseurs de code statique pour C

Quel analyseur de code statique (le cas échéant) utilisez-vous? J'utilise Pylint pour Python et je suis assez satisfait de cela, maintenant j'ai besoin de quelque chose de similaire pour C Code C.

Quelle quantité de sa sortie devez-vous supprimer pour une utilisation quotidienne normale?


2 commentaires

Pour développer mes questions: Quelqu'un a-t-il utilisé SourceMonitor ( Campwoodsw.com/sourcemonitor.html ), Et comment allez-vous évaluer?


Dupliquer de Stackoverflow.com/questions/2873/ ... ?


6 Réponses :


0
votes

J'ai utilisé PCLINT pour toujours et vraiment l'aimé. J'aimerais qu'ils entraient dans C # ... Ils sont ceux avec les pop quiz sur C ou C ++ code dans tous les magazines.


0 commentaires

4
votes

Il y a Splint , bien que, pour être honnête, je n'ai jamais pu le faire fonctionner; Sur ma plate-forme, c'est vraiment trop hyperactif. En pratique, mes «peluchons» les plus utilisés sont les drapeaux d'avertissement suivants pour gcc xxx

bien sûr, j'ai surtout oublié quelle la moitié d'entre elles veut dire. Mais ils attrapent assez de choses.


1 commentaires

Il y a une grande différence entre les avertissements des peluches et du compilateur, car Lint Fixe Cross Module vérifie que le compilateur ne peut avertir que des problèmes dans le fichier source compilé et inclus des fichiers d'en-tête.



14
votes

Wikipedia conserve un Liste des outils d'analyse de code statique pour différentes langues (y compris c). < / p>

Personnellement, j'ai utilisé à la fois PC-Lint et splint . Le meilleur choix dépend du type d'application que vous avez écrit. Cependant, peu importe quel outil vous utilisez, il y aura un rapport signal bas sur le bruit jusqu'à ce que vous ajustez correctement l'outil et votre code.

pc-slet est l'outil de peluche le plus puissant que j'ai utilisé. Si vous l'ajoutez à un projet existant, le rapport signal au bruit peut être faible. Cependant, une fois que l'outil et votre code sont correctement configurés, il peut être utilisé dans le cadre de votre processus de construction standard. Le dernier projet majeur où je l'ai utilisé, nous l'avons défini afin que pc-slet avertit la construction. Les licences pour PC-Lint coûtent 389 $, mais cela vaut le coût.

attelle est un excellent outil open-source. Je l'ai utilisée sur plusieurs projets, mais j'ai constaté qu'il peut être difficile de configurer lors de l'utilisation d'un compilateur avec des extensions non-ansi c (par exemple sur des projets de systèmes embarqués).

Valgrind vaut également la peine d'être considéré comme un outil d'analyse dynamique.


Vous avez spécifiquement demandé des commentaires sur SourceMonitor . Cet outil fournit des métriques intéressantes sur votre code, mais doit être utilisée comme complément à un bon outil de peluche car il ne fournit pas ce type d'analyse.

Comme indiqué sur leur page d'accueil, SourceMonitor sera:

... Découvrez combien de code vous avez et identifier la complexité relative de vos modules. Par exemple, vous pouvez utiliser SourceMonitor d'identifier le code qui est le plus susceptible de contenir des défauts et justifie ainsi un examen officiel.

Je l'ai utilisé sur un projet récent et je l'ai trouvé facile à utiliser (même pour le code des systèmes embarqués). La métrique de complexité est une excellente ressource pour le développement de code qui sera moins sujette d'erreur et plus facile à entretenir.

SourceMonitor fournit de beaux graphiques de sa sortie ainsi que XML bien formaté si vous souhaitez automatiser la collection de métriques. Le seul inconvénient est que l'outil ne fonctionne que sur Windows.


1 commentaires

Votre opinion sur Splint est vraiment utile, car je travaille avec le compilateur Microchip C18 qui prend en charge quelques extensions C. Merci.



0
votes

Il y en a un dans le projet LLVM Clang http://clang-analyzer.llvm.org . Je n'ai pas essayé moi-même mais j'ai l'intention de le faire.

Il a l'air plutôt bien en action: HTTP : //www.mikeash.com/? Page = PYBLOG / Friday-QA-2009-03-06-UTILISATION-THE-CLANG-STATIC-analyzer.html Ci-dessus est pour l'objectif-c mais il devrait être le même pour c.


0 commentaires

5
votes

Nous utilisons PC-Lint et sommes très heureux avec cela.

Il semble y avoir quelques camps concernant la suppression des messages et le réglage:

  • supprime tout, puis sans suppripper seulement ce qui vous intéresse
  • Infressez tout, puis supprimez les avertissements que vous n'êtes pas intéressé par
  • Gardez tout ce qui est sans dépression

    Nous avons tendance à tomber quelque part entre les deuxième et troisième catégories. Cela signifie qu'un vidage de texte 100MIB + ludicrous (une erreur par ligne) par peluche est exécuté dans les bibliothèques principales (beaucoup d'ancien code).

    Un Diff DIFF Montres d'outils à l'autre pour les modifications et les e-mails Ceux-ci à l'auteur de Selt, qui conserve le montant que la plupart des gens doivent examiner jusqu'à quelques lignes. Nous recueillons des statistiques intéressantes sur les erreurs-was-temps avec une extraction de données de base.

    Vous pouvez être vraiment poli ici, hyperlier les erreurs vers des descriptions plus détaillées, fournissant des "points" pour la fixation des avertissements existants, etc ...


0 commentaires

2
votes

Je suis un grand fan de travail de David Evans sur LC / Lint , qui a apparemment eu son Nom changé en attelle. Il est très agressif et vous pouvez le dire beaucoup d'informations utiles en ajoutant des annotations à votre code. Il est conçu pour être utilisé avec des annotations de programmeurs . Cela fonctionnera sans eux, mais si vous essayez de l'utiliser comme un simple vérificateur sans fournir d'annotations, vous serez probablement déçu. Si ce que vous voulez, c'est une vérification totalement automatisée, et si vous pouvez faire affaire avec un outil Windows uniquement, vous êtes mieux avec Gimpel's PC-Lint . Jim Gimpel a eu des clients heureux depuis plus de 25 ans.


0 commentaires