Le choix d'un outil d'analyse de code statique
Je suis en train de travailler sur un projet dans lequel je code en C dans un environnement UNIX. J'ai été en utilisant la fibre outil pour vérifier mon code source. Les peluches a été autour depuis longtemps (depuis 1979), quelqu'un peut-il suggérer une plus récente de l'outil d'analyse de code que je pourrais utiliser ? De préférence, un outil qui est gratuit.
- Voir aussi Quel est le meilleur outil de ligne de commande pour le nettoyage de code et > Recommandé GCC options d'alerte pour C. Si vous avez des prototypes correctement centralisée dans les en-têtes et utilisé un peu partout, puis la croix-contrôle des fichiers que
lint
ne se fait également par le compilateur (quoique un fichier à la fois). - Le vote pour la fermer comme outil rec.
- PVS-Studio analyzer est maintenant disponible pour Linux - viva64.com/en/b/0441
Vous devez vous connecter pour publier un commentaire.
Ne négligez pas le compilateur lui-même.
Lire le compilateur de la documentation et de trouver tous les avertissements et les erreurs qu'il peut fournir, et puis de permettre autant que faire sens pour vous.
Aussi assurez-vous de dire à votre compilateur de traiter les avertissements comme des erreurs de sorte que vous êtes obligé de les corriger immédiatement. ("-Werror" sur gcc)
Aussi: "Mur" sur gcc ne pas permettre à tous les avertissements, ne soyez pas dupe.
Aussi: découvrez valgrind (gratuit!) c'est le "détecter automatiquement[s] de nombreux de gestion de la mémoire et le filetage de bugs, et le profil de[s] de vos programmes dans le détail."
Valgrind n'est pas une vérification statique, mais c'est un excellent outil! http://valgrind.org
Pour du code C, vous devriez certainement utiliser Flexelint. Je l'ai utilisé pendant près de 15 ans, et ne jurent que par elle. L'un des très bons fonctions qu'il a, c'est que les avertissements peuvent être activer ou désactiver via les commentaires dans le code ("/* non-e123*/"). Ceci s'est avéré être un puissant outil de documentation quand vous vouliez quelque chose hors de l'ordinaire. "Je suis la désactivation de l'avertissement de X, donc, il y a de bonnes raison pour laquelle je suis en train de faire X."
Pour quiconque en intéressant C/C++ questions, de regarder certains de leurs exemples sur leur site et de voir si vous pouvez trouver les bugs, sans chercher à les conseils.
J'ai entendu de bonnes choses au sujet de clang analyseur statique, qui IIRC utilise LLVM comme c'est le backend. Si c'est mis en place sur votre plate-forme, qui peut être un bon choix.
De ce que je comprends, il fait un peu plus que juste de l'analyse syntaxique. Automatique "bugs", par exemple.
Nous avons été à l'aide de Coverity Prévenir de vérifier le code source C++.
Ce n'est pas un outil gratuit (bien que je crois qu'ils offrent de balayage gratuit pour les projets open source), mais il est l'un des meilleurs outils d'analyse statique, vous trouverez. J'ai entendu dire que c'est encore plus impressionnant sur les C qu'en C++, mais il nous a également aidé à éviter un certain nombre de bugs à ce jour.
J'ai récemment compilé une liste de tous les les outils d'analyse statique, j'ai eu à ma disposition, je suis encore dans le processus d'évaluation de tous. Remarque, ce sont principalement l'analyse de la sécurité des outils.
Vous pouvez utiliser cppcheck. Il est un facile pour utiliser l'outil d'analyse de code statique.
Par exemple:
cppcheck --enable=all .
va vérifier tous les C/C++, les fichiers dans le dossier en cours.
Non comme des outils souffrent généralement d'une "fausse alarme" problème: ils rapportent beaucoup plus de questions que ça existe. Si la proportion de véritablement utile d'avertissements est trop faible, l'utilisateur apprend à ignorer l'outil. D'outils plus modernes dépenser un peu d'effort pour se concentrer sur le plus probable/intéressant avertissements.
PC-lint/Flexelint sont très puissant et utile les outils d'analyse statique, et hautement configurable, mais malheureusement pas gratuit.
Lors de la première utilisation d'un outil de ce genre, ils peuvent produire un grand nombre de mises en garde, ce qui peut rendre difficile de faire la différence entre les grands et les petits. Par conséquent, il est préférable de commencer à utiliser l'outil sur votre code dès le début du projet que possible, et ensuite l'exécuter sur votre code aussi souvent que possible, de sorte que vous pouvez faire face à de nouvelles mises en garde comme ils viennent.
Avec l'utilisation continue comme cela, vous apprendrez rapidement comment écrire votre code dans une manière qui confirme la règle appliquée par l'outil.
De ce fait, je préfère des outils comme les Peluches qui fonctionnent relativement rapidement, et donc à encourager une utilisation continue, plutôt que le plus lourd des outils qui vous pouvez vous retrouver en utilisant de moins en moins souvent, voire pas du tout.
Vous pouvez essayer CppDepend, une jolie complète analyseur statique disponible sur windows et linux, à travers VS Plugin, IDE ou en ligne de commande, et il est gratuit pour open source contributeurs
Vous pourriez trouver la Uno outil utile. C'est l'un des rares non-jouet options. Elle diffère de la charpie, Flexelint, etc. en se concentrant sur un petit nombre de "sémantique" des erreurs (pointeur null derefs, hors des limites d'un tableau d'indices, et l'utilisation de variables non initialisées). Il permet également à l'utilisateur des contrôles, comme le verrouillage et déverrouillage de la discipline.
Je travaille en vue d'une diffusion publique d'un successeur de l'outil,
Orion(CONTENU N'est PLUS DISPONIBLE)Il y a un "-Weffc++" option de gcc qui, selon le système Mac OS X man page:
[snip]
Je sais que vous avez demandé sur le C, mais c'est le plus proche que je connais..
peluches est constamment mis à jour... alors, pourquoi voulez-vous une plus récente.
BTW flexelint est peluches
G'day,
Je suis totalement d'accord avec les suggestions de lire et de digérer ce que le compilateur te dit après la configuration de la Paroi.
Un bon outil d'analyse statique pour la sécurité est FlawFinder écrit par David Wheeler. Il fait un bon travail à la recherche pour les différentes failles de sécurité,
Toutefois, il ne remplace pas avoir un bien à quelqu'un de lire à travers votre code. Comme David le dit sur sa page web, "Un imbécile avec un outil est toujours un imbécile!"
acclamations,
Rob
J'ai trouvé 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 unes des autres.
Il y a quelques bonnes discussions dans certaines conférences ici. C'est à partir d'une conférence organisée par le Département AMÉRICAIN de la Sécurité intérieure sur l'analyse statique.
Éparses est un logiciel d'ordinateur outil de, déjà disponible sur Linux, conçu afin de trouver le codage des failles dans le noyau Linux.
Il y a deux projets de Linux Vérification Centre visant à améliorer la qualité de la loadable kernel modules.