c - Choisir un outil d'analyse de code statique

Translate

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.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

N'oubliez 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 vous le souhaitez.

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

Aussi: "-Wall" sur gcc faitne pasactivez tous les avertissements, ne vous laissez pas berner.

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

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

La source
Translate

Pour le code C, vous devez absolument utiliserFlexelint. Je l'ai utilisé pendant 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 les commentaires dans le code ("/ * lint -e123 * /"). Cela s'est avéré être un outil de documentation puissant lorsque vous vouliez quelque chose qui sortait de l'ordinaire. "Je désactive l'avertissement X, donc il y a une bonne raison pour laquelle je fais X."

Pour quiconque s'intéresse à des questions C / C ++ intéressantes, regardez certains de leurs exemples sur leur site et voyez si vous pouvez trouver les bogues sans regarder les indices.

La source
Translate

J'ai entendu de bonnes choses suranalyseur statique clang, dont l'IIRC utilise LLVM comme backend. Si cela est mis en œuvre sur votre plate-forme, cela pourrait être un bon choix.

D'après ce que je comprends, il fait un peu plus qu'une simple analyse syntaxique. "Recherche automatique de bogues", par exemple.

La source
Translate

Nous avons utiliséPrévenir la couverturepour vérifier le code source C ++.

Ce n'est pas un outil gratuit (bien que je pense qu'ils offrent une analyse gratuite pour les projets open source), mais c'est l'un des meilleurs outils d'analyse statique que vous trouverez. J'ai entendu dire que c'était encore plus impressionnant sur C que sur C ++, mais cela nous a permis d'éviter un certain nombre de bogues jusqu'à présent.

La source
Translate

J'ai récemment compilé une liste de tous les outils d'analyse statique que j'avais à ma disposition, je suis toujours en train de les évaluer tous. Notez qu'il s'agit principalement d'outils d'analyse de sécurité.

La source
Translate

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

La source
Translate

Les outils de type peluche 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 réellement utiles est trop faible, l'utilisateur apprend à simplement ignorer l'outil. Les outils plus modernes consacrent quelques efforts pour se concentrer sur les avertissements les plus probables / intéressants.

La source
Translate

PC-fibre / Flexelintsont 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 principaux et les 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 apprenez rapidement à écrire votre code d'une manière qui confirme les règles appliquées par l'outil.

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

La source
Translate

Tu peux essayerCppDepend, un analyseur statique assez complet disponible sur Windows et Linux, via VS Plugin, IDE ou ligne de commande, et c'est gratuit pourcontributeurs open source

La source
Translate

Vous pourriez trouver leOutil Unoutile. C'est l'une des rares options gratuites sans jouet. Il diffère de lint, Flexelint, etc. en se concentrant sur un petit nombre d'erreurs "sémantiques" (déréférencement de pointeur nul, index de tableau hors limites et utilisation de variables non initialisées). Il permet également des vérifications définies par l'utilisateur, comme la discipline de verrouillage-déverrouillage.

I'm working towards a public release of a successor tool, Orion (CONTENU PLUS DISPONIBLE)

La source
Translate

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

Avertir des violations des règles de style suivantes du livre Effective C ++ de Scott Meyers:

[couper]

Je sais que vous avez posé une question sur C, mais c'est le plus proche que je connaisse.

La source
itj
Translate

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

BTW flexelintispeluche

La source
Translate

G'day,

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

Un bon outil d'analyse statique pour la sécurité estFlawFinderécrit par David Wheeler. Il fait du bon travail à la recherche de 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 est toujours un imbécile!"

à votre santé,

Rob

La source
Translate

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

Il y a de bonnes discussions dans certaines des discussionsici. 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.

La source
Translate

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

Il y a deux projets actifs deCentre de vérification Linuxvisait à améliorer la qualité des modules de noyau chargeables.

  1. Linux Driver Verification (LDV) - un ensemble d'outils complet pour la vérification du code source statique des pilotes de périphériques Linux.
  2. KEDR Framework - un cadre extensible pour l'analyse dynamique et la vérification des modules du noyau.
  3. Un autre projet en cours est la vérification du système de fichiers Linux qui vise à développer un ensemble d'outils dédié pour la vérification des implémentations de système de fichiers Linux.
La source