Question

Je travaille sur un projet où je code en C dans un environnement UNIX.J'utilise l'outil lint pour vérifier mon code source.Lint existe depuis longtemps (depuis 1979), quelqu'un peut-il suggérer un outil d'analyse de code plus récent que je pourrais utiliser ?De préférence un outil gratuit.

Était-ce utile?

La solution

Ne négligez pas le compilateur lui-même.

Lisez la documentation du compilateur et recherchez tous les avertissements et erreurs qu'il peut fournir, puis activez-en autant que cela vous convient.

Assurez-vous également de dire à votre compilateur de traiter les avertissements comme des erreurs afin que vous soyez obligé de les corriger immédiatement.("-Erreur" sur gcc)

Aussi:"-Wall" sur gcc le fait pas activez tous les avertissements, ne vous laissez pas berner.

Aussi aussi:consultez valgrind (gratuit !) - il "détecte automatiquement de nombreux bogues de gestion de la mémoire et de threading, et profile vos programmes en détail."

Valgrind n'est pas un vérificateur statique, mais c'est un excellent outil ! http://valgrind.org

Autres conseils

Pour le code C, vous devez absolument utiliser Flexelint.Je l'utilise depuis près de 15 ans et je ne jure que par lui.L'une de ses fonctionnalités vraiment intéressantes est que les avertissements peuvent être désactivés et activés de manière sélective via des commentaires dans le code ("/* lint -e123*/").Cela s’est avéré être un outil de documentation puissant lorsque vous souhaitiez faire quelque chose qui sort de l’ordinaire."Je désactive l'avertissement X, il y a donc une bonne raison pour laquelle je fais X."

Pour tous ceux qui ont des questions intéressantes sur le C/C++, regardez certains de leurs exemples sur leur site et voyez si vous pouvez comprendre les bogues sans regarder les astuces.

J'ai entendu de bonnes choses sur analyseur statique clang, que IIRC utilise LLVM comme backend.Si cela est implémenté sur votre plateforme, cela pourrait être un bon choix.

D'après ce que j'ai compris, cela fait un peu plus qu'une simple analyse syntaxique."Recherche automatique de bugs", par exemple.

Nous avons utilisé Prévention de la couverture pour consulter le code source C++.

Ce n'est pas un outil gratuit (même si je pense qu'ils proposent une analyse gratuite pour les projets open source), mais c'est l'un des meilleurs outils d'analyse statique que vous puissiez trouver.J'ai entendu dire que c'était encore plus impressionnant en C qu'en C++, mais cela nous a aidé à éviter un certain nombre de bugs jusqu'à présent.

J'ai récemment dressé une liste de tous les outils d'analyse statique dont je disposais, je suis toujours en train de les évaluer tous.Notez qu’il s’agit principalement d’outils d’analyse de sécurité.

Vous pouvez utiliser cppcheck.Il s'agit d'un outil d'analyse de code statique facile à utiliser.
Par exemple:
cppcheck --enable=all .
vérifiera tous les fichiers C/C++ du dossier actuel.

Les outils de type pelucheux souffrent généralement d'un problème de « fausse alarme » :ils signalent beaucoup plus de problèmes qu’il n’en existe réellement.Si la proportion d’avertissements véritablement utiles est trop faible, l’utilisateur apprend à ignorer l’outil.Les outils plus modernes déploient des efforts pour se concentrer sur les avertissements les plus probables/intéressants.

PC-lint/Flexelint sont des outils d'analyse statique très puissants et utiles, et hautement configurables, bien que malheureusement pas gratuits.

Lors de la première utilisation d’un outil comme celui-ci, ils peuvent produire un grand nombre d’avertissements, ce qui peut rendre difficile la distinction entre les avertissements majeurs et mineurs.Par conséquent, il est préférable de commencer à utiliser l'outil sur votre code le plus tôt possible dans le projet, puis de l'exécuter sur votre code aussi souvent que possible, afin de pouvoir gérer les nouveaux avertissements au fur et à mesure qu'ils apparaissent.

Avec une utilisation continue comme celle-ci, vous apprendrez bientôt à écrire votre code d'une manière qui confirme les règles appliquées par l'outil.

Pour cette raison, je préfère les outils comme Lint qui s'exécutent relativement rapidement et encouragent donc une utilisation continue, plutôt que les outils plus encombrants que vous pourriez utiliser moins souvent, voire pas du tout.

Tu peux essayer CppDépend, un analyseur statique assez complet disponible sur Windows et Linux, via VS Plugin, IDE ou en ligne de commande, et il est gratuit pour contributeurs open source

Vous pourriez trouver le Outil Uno utile.C'est l'une des rares options gratuites non-jouets.Il diffère des peluches, Flexelint, etc.en se concentrant sur un petit nombre d'erreurs « sémantiques » (déréférences de pointeur nul, indices de tableau hors limites et utilisation de variables non initialisées).Il permet également des contrôles définis par l'utilisateur, comme la discipline de verrouillage-déverrouillage.

Je travaille sur une version publique d'un outil successeur, Orion (CONTENU PLUS DISPONIBLE)

Il existe une option "-Weffc++" pour gcc qui, selon la page de manuel de Mac OS X :

Avertir des violations des directives de style suivantes du livre Effective C++ de Scott Meyers :

[couper]

Je sais que vous avez posé des questions sur C, mais c'est ce qui s'en rapproche le plus à ma connaissance.

peluche est constamment mis à jour...alors pourquoi voudriez-vous un plus récent.

BTW Flexelint est peluche

Bonjour,

Je suis totalement d'accord avec les suggestions pour lire et digérer ce que le compilateur vous dit après avoir défini -Wall.

Un bon outil d'analyse statique pour la sécurité est Recherche de défauts écrit par David Wheeler.Il fait du bon travail en recherchant divers exploits de sécurité,

Cependant, cela ne remplace pas la lecture de votre code par une personne compétente.Comme le dit David sur sa page Web : « Un imbécile avec un outil reste un imbécile ! »

acclamations,

Rob

J'ai constaté qu'il est généralement préférable d'utiliser plusieurs outils d'analyse statique pour rechercher des bogues.Chaque outil est conçu différemment et peut trouver des choses très différentes les unes des autres.

Il y a de bonnes discussions dans certaines discussions ici.Il s'agit d'une conférence organisée par le Département américain de la Sécurité intérieure sur l'analyse statique.

Clairsemé est un outil logiciel informatique, déjà disponible sous Linux, conçu pour rechercher d'éventuelles erreurs de codage dans le noyau Linux.

Il y a deux projets actifs de Centre de vérification Linux visait à améliorer la qualité des modules chargeables du noyau.

  1. Linux Driver Verification (LDV) - un ensemble d'outils complet pour la vérification statique du code source des pilotes de périphériques Linux.
  2. KEDR Framework - un framework extensible pour l'analyse dynamique et la vérification des modules du noyau.
  3. Un autre projet en cours est Linux File System Verification, qui vise à développer un ensemble d'outils dédiés à la vérification des implémentations du système de fichiers Linux.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top