webentwicklung-frage-antwort-db.com.de

Welche statischen Analyse-Tools für Open Source C ++ sind verfügbar?

Java hat einige sehr gute statische Open-Source-Analyse-Tools wie FindBugs , Checkstyle und PMD . Diese Tools sind einfach zu bedienen, sehr hilfreich, laufen auf mehreren Betriebssystemen und kostenlos.

Kommerzielle statische C++ - Analyseprodukte sind verfügbar. Obwohl solche Produkte großartig sind, sind die Kosten für Studenten viel zu hoch und es ist normalerweise ziemlich schwierig, eine Testversion zu bekommen.

Die Alternative besteht darin, statische Open-Source-Analysetools für C++ zu finden, die auf mehreren Plattformen (Windows und Unix) ausgeführt werden können. Mithilfe eines Open Source-Tools kann es an bestimmte Anforderungen angepasst werden. Die Werkzeuge zu finden war keine leichte Aufgabe.

Unten finden Sie eine kurze Liste der statischen C++ - Analysetools, die von anderen gefunden oder vorgeschlagen wurden.

Was sind einige andere portable statische C++ - Analysetools, die jeder kennt und die empfohlen werden können?

Einige verwandte Links.

295
jnancheta

Oink ist ein Tool, das auf dem Elsa C++ - Frontend aufbaut. Mozilla's Pork ist eine Gabelung von Elsa/Oink.

Siehe: http://danielwilkerson.com/oink/index.html

20

CppCheck ist Open Source und plattformübergreifend.

Mac OS X:

brew install cppcheck
73
Soo Wei Tan

In Bezug auf den GNU Compiler hat gcc bereits eine eingebaute Option, die zusätzliche Warnungen zu denen von -Wall aktiviert. Die Option ist - Weffc ++ und handelt von den Verstößen gegen einige Richtlinien von Scott Meyers , die in seinen Büchern veröffentlicht wurden " Effektiver und effektiveres C++ ".

Die Option erkennt insbesondere die folgenden Elemente:

  • Definieren Sie einen Kopierkonstruktor und einen Zuweisungsoperator für Klassen mit dynamisch zugewiesenem Speicher.
  • Initialisierung der Zuweisung in Konstruktoren vorziehen.
  • Machen Sie Destruktoren in Basisklassen virtuell.
  • Bitten Sie "operator =", einen Verweis auf * this zurückzugeben.
  • Versuchen Sie nicht, eine Referenz zurückzugeben, wenn Sie ein Objekt zurückgeben müssen.
  • Unterscheiden Sie zwischen Präfix- und Postfix-Formen von Inkrement- und Dekrementoperatoren.
  • Überladen Sie niemals "&&", "||" oder ",".
53
Nicola Bonelli

Derzeit in der Entwicklung, aber clang führt C-Analysen durch und zielt darauf ab, C++ im Laufe der Zeit zu verarbeiten. Es ist Teil des LLVM Projekts.

Update : Während auf der Landingpage steht "Der Analyzer ist ein fortlaufender Work-in-Progress", ist es jetzt doch dokumentiert als statischer Analysator für C und C++.

Frage: Wie kann ich GCC/Clang für statische Analysen ausführen? (Nur Warnungen)

Compiler-Option: -fsyntax-only

27
Don Wakefield

Jemand anders hat -Weffc ++ erwähnt, aber das ist tatsächlich eine der wenigen GCC-Warnungen, die ich standardmäßig nicht aktiviere. Die Warnungen, die ich einschalte, sind jedoch das wichtigste statische Analysetool in meinem Kit. Sie sehen das vollständige Liste der empfohlenen Warnungen .

Zusammenfassend:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -deaktivierte-Optimierung -Format = 2 -Winnit-self-logical-op -Wmissing-Declarations -Wmissing-Include-Verzeichnisse -Wnoexcept -Wold -Style-Cast-Overloaded-Virtual-Redundant-Decls-Shadow-Sign-Conversion-Sign-Promo-Strict-Null-Sentinel-Strict-Overflow = 5-Switch-Standard-Sundef -Ferror-No-unused

Beachten Sie, dass einige von diesen eine neue Version von gcc erfordern. Sie müssen sie daher möglicherweise von Ihrer Liste streichen, wenn Sie mit 4.5 oder etwas anderem nicht weiterkommen.

16
David Stone

John Carmack erwähnt auch PVS-Studio in diesem interessanten Blog-Beitrag über "Static Code Analysis" .

14
Lucas Cimon

Wenn Sie unter Open Source wirklich "frei" meinten, ist die vorgefertigte -Analyse von Microsoft eine gute. Natürlich nur für Windows. Es ist vollständig in Visual Studio und den Compiler integriert. z.B.:

cl /analyze Sample.cpp
7
user15071

Mozillas statische Analyse ist wahrscheinlich einen Blick wert.

6
Daniel James

Splint scheint die Rechnung für C zu füllen.

Wenn Sie Open Source nicht angegeben hätten, würde ich sagen, dass Gimpel Software 's PCLint wahrscheinlich eines der besten Tools ist, das für die Prüfung von statischem Code in C++ verfügbar ist. Aber natürlich ist es kein Open Source.

Mac OS X:

brew install splint
4

Microsofts PREFast ist auch im Windows Driver Kit verfügbar. Version 7.0 kann heruntergeladen werden hier .

In den Microsoft-Dokumenten wird angegeben, dass nur der Treibercode verwendet werden soll, aber in diesem (alten) Blog-Beitrag werden die Schritte zum Ausführen aufgeführt. Vielleicht kann es in einen normalen Build-Prozess integriert werden?

3
tmitchell

Wir haben an einem Eclipse CDT-Plug-In namens Metriculator gearbeitet. Es befindet sich noch in der Entwicklung, aber einige wichtige Metriken (z. B. LSLOC, McCabe, EfferentCoupling) sind bereits implementiert.

Siehe http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation für weitere Details wie Videodemonstration und Dokumentation.

Der neueste nächtliche Build kann über die Update-Site unter folgender Adresse installiert werden: http://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

Weitere Beschreibung

Metriculator analysiert statisch den C++ - Quellcode und generiert Softwaremetriken. Metriken werden als Codan-Checker implementiert. Die Analyseergebnisse können in einer separaten Ansicht untersucht werden. Jede Metrik verfügt über konfigurierbare Eigenschaften (z. B. einen Schwellenwert für die maximale Anzahl von Codezeilen pro Funktion). Wenn Sie diesen Schwellenwert überschreiten, wird ein Problem gemeldet und im Quellcode-Editor eine Markierung erstellt.

mit dem Metrikulator können Sie:

  • c ++ Dateien/Ordner/Projekte analysieren
  • definieren Sie Metrikschwellenwerte und aktivieren/deaktivieren Sie die Metrik auf der Einstellungsseite von Codans
  • haben Problemmarkierungen in Quellcode-Editoren
  • untersuchen Sie die metrischen Ergebnisse
  • metrikergebnisse als Tag Cloud exportieren (optional über Update-Site verfügbar)

Gegenwärtig wird der Metrikulator mit den folgenden Metriken geliefert:

  • McCabe (Zyklomatische Komplexität)
  • EfferentCoupling pro Typ
  • Logische Quellcodezeilen
  • Anzahl der Mitglieder pro Typ
  • Anzahl der Parameter pro Funktion
2
jules

Man kann Erweiterungen von GCC auch in MELT (eine domänenspezifische Sprache, die zum Erweitern von GCC entwickelt wurde) oder GCC-Plugins in C (viel schwieriger) codieren, um einige benutzerdefinierte Analysen durchzuführen .

Sie sollten versuchen, oo-Browser hat eine tolle Integration mit Xemacs

1
Jude

Doxygen führt einige Kontrollflussanalysen durch und generiert Diagramme. Diese sind möglicherweise nicht das, wonach Sie suchen, aber ich habe sie als nützlich erachtet.

0
Paul Nathan