Welche statischen Open Source C ++ - Analysetools sind verfügbar? [geschlossen]


301

Java verfügt über einige sehr gute statische Open Source-Analysetools wie FindBugs , Checkstyle und PMD . Diese Tools sind einfach zu bedienen, sehr hilfreich, laufen auf mehreren Betriebssystemen und sind kostenlos .

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

Die Alternative besteht darin, statische Open Source C ++ - Analysetools zu finden, die auf mehreren Plattformen (Windows und Unix) ausgeführt werden können. Durch die Verwendung 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 andere tragbare statische Open Source C ++ - Analysetools, die jeder kennt und die empfohlen werden können?

Einige verwandte Links.


Das kommerzielle DMS Software Reengineering Toolki verwaltet Java, C, C ++ und COBOL und bietet Analyse, AST-Erstellung, Namens- / Typauflösung, Steuerungs- / Datenflussanalyse, benutzerdefinierte Analyse und Transformation. Siehe semanticdesigns.com/Products/DMS/DMSToolkit.html .
Ira Baxter

1
Für kommerzielle Tools gibt es auch CppDepend ( cppdepend.com ), und möglicherweise könnte die Testversion für Studenten ausreichen.

Antworten:


21

Oink ist ein Tool, das auf dem Elsa C ++ - Frontend aufbaut. Mozillas Schweinefleisch ist eine Gabel von Elsa / Oink.

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


1
Ich habe in meinem Leben mehr als 1000 Programme zusammengestellt, aber aus Liebe zu Gott kann ich dieses Paket nicht zusammenstellen, egal was passiert. Ich habe versucht, Fedora, Ubuntu, WSL, Cygwin, MSYS2, Windows zu verwenden - aber nein. Es fehlt immer etwas und die Dokumentation ist einfach schrecklich. Versteh mich nicht falsch, ich denke das Tool ist hervorragend. Aber die Website und die Dokumentation scheinen in 10-15 Jahren niemand berührt zu haben.
Apache

73

CppCheck ist Open Source und plattformübergreifend.

Mac OS X:

brew install cppcheck

1
@gio Ich habe persönlich keine Probleme gesehen. Ich glaube, CppCheck hat die Fähigkeit, bestimmte Pfade oder Dateien zu ignorieren oder auszuschließen, was dazu beiträgt, den Bereich einzugrenzen.
Soo Wei Tan

1
Unter Windows:choco install cppcheck
KindDragon

53

In Bezug auf den GNU-Compiler verfügt gcc bereits über eine integrierte Option, die zusätzliche Warnungen zu denen von -Wall ermöglicht. Die Option ist -Weffc ++ und es geht um die Verstöße gegen einige Richtlinien von Scott Meyers, die in seinen Büchern " Effective and More Effective C ++ " veröffentlicht wurden.

Die Option erkennt insbesondere die folgenden Elemente:

  • Definieren Sie einen Kopierkonstruktor und einen Zuweisungsoperator für Klassen mit dynamisch zugewiesenem Speicher.
  • Ziehen Sie die Initialisierung der Zuweisung in Konstruktoren vor.
  • Machen Sie Destruktoren in Basisklassen virtuell.
  • Lassen Sie "operator =" einen Verweis auf * this zurückgeben.
  • 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 ",".

7
Zusätzlich zu -Wall und -Weffc ++ von gcc führt -Wextra eine gute kostenlose statische Analyse durch, z. B. Verzweigungen, die keinen Wert zurückgeben, oder die Überprüfung eines vorzeichenlosen Wertes auf weniger als Null. Es ist bemerkenswert, wie oft professionelle Programmierer letzteres für eine gute Idee halten…
Flash Sheridan

24
Yuck, -Weffc++warnt vor Tonnen von Konstrukten, die in einer großen Codebasis vollkommen in Ordnung sind. Ich stimme jedoch dem Vorschlag von zu -Wextra; Verlasse dein Zuhause nicht ohne es!
Tom

29

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 Zielseite "Der Analysator befindet sich in ständiger Arbeit" steht, ist er jetzt als statischer Analysator für C und C ++ dokumentiert .

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

Compiler-Option: -fsyntax-only


1
LLVM ist ein sehr interessantes Projekt, das im Vergleich zu gcc in kürzerer Zeit weitere optimierte Binärdateien generiert. und klirren, wenn es fertig ist, wird sein Frontend sein ...
Nicola Bonelli

Ein anderer Editor fügte die Informationen zum Schalter -fsyntax-only hinzu. Beachten Sie nur, dass es sich im Wesentlichen um eine Anforderung handelt, die Analyse auszuführen, die der Compiler ausführen würde, ohne sie tatsächlich zu kompilieren, und die Warnungen auszugeben. Ich bin mir nicht sicher, aber ich denke, das unterscheidet sich von der statischen Analyse.
Don Wakefield

17

Jemand anderes erwähnte -Weffc ++, 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 Analysewerkzeug in meinem Kit. Sie können die vollständige Liste der empfohlenen Warnungen anzeigen .

Zusammenfassend:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimierung -Wformat = 2 -Winit-self -Wlogical-op -Wmissing-Deklarationen -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decs -Wshadow -Wsign-Conversion -Wsign-Promo -Wstrict-Null-Sentinel -Wstrict-Overflow = 5 -Wswitch-Default -Wundef -Werror -Wno-unused

Beachten Sie, dass für einige dieser Versionen eine neue Version von gcc erforderlich ist. Sie müssen sie daher möglicherweise aus Ihrer Liste entfernen, wenn Sie auf 4.5 oder etwas anderes zurückgreifen.



7

Wenn Sie mit Open Source wirklich "kostenlos" gemeint haben, ist die Prefast- 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

In welcher Version und Edition ist diese erhältlich?
Twk

Scheint in den Compiler eingebaut zu sein, der kostenlos ist. Die Integration ist wahrscheinlich nur Team Edition.
JBRWilkinson


4

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

Wenn Sie Open Source nicht angegeben haben, würde ich sagen , dass PCLint von Gimpel Software wahrscheinlich eines der besten Tools für die Überprüfung von statischem Code in C ++ ist. Aber natürlich ist es kein Open Source.

Mac OS X:

brew install splint

2
Aber teuer für einen einzelnen Entwickler :) Ich mag kostenlos besser
Robert Gould

6
Schiene ist für C, nicht für C ++. Ich weiß nicht, ob sie planen, die Abdeckung zu erweitern oder nicht. Ich hoffe!
Harold Bamford

Ja, pclint ist einen Versuch wert, sein Gegenstück in Unix heißt flexe-lint, die 9.0-Version muss schneller sein als die 8.x-Version, die 9.0-Version unterstützt auch vorkompilierte Header, um die Analyse zu beschleunigen. Es braucht Zeit, bis Sie PC-Flusen zähmen. Es ist falsch positiv, was zu Problemen führen kann, wenn Sie es nicht selektiv ignorieren können.
Zhaorufei

3

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

In den Microsoft-Dokumenten heißt es, dass es nur mit Treibercode ausgeführt werden soll, aber dieser (alte) Blog-Beitrag enthält Schritte zum Ausführen. Vielleicht kann es in einen normalen Erstellungsprozess integriert werden?


PREFast verlangsamt Ihren Build-Prozess erheblich. Für jedes echte Projekt kann sich Ihr Build-Server dies möglicherweise nicht leisten.
Zhaorufei

@zhaorufei: Die meisten statischen Analysen sind nicht "schnell"; Sie haben per Definition eine ziemlich komplexe Code-Analyse-Aufgabe zu erledigen. Wenn Ihnen die Build-Kosten nicht immer gefallen, machen Sie sie einfach optional.
Ira Baxter

2

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.

Weitere Informationen wie Videodemonstration und Dokumentation finden Sie unter http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation .

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-Prüfer implementiert. Die Analyseergebnisse können in einer separaten Ansicht untersucht werden. Jede Metrik verfügt über konfigurierbare Eigenschaften (z. B. einen Schwellenwert für 'maximale Codezeilen pro Funktion'). Wenn Sie diesen Schwellenwert überschreiten, wird ein Problem gemeldet und eine Markierung im Quellcode-Editor erstellt.

Mit dem Metrikator können Sie:

  • Analysieren Sie C ++ - Dateien / Ordner / Projekte
  • Definieren Sie Metrikschwellenwerte und aktivieren / deaktivieren Sie die Metrik auf der Codans-Einstellungsseite
  • Problemmarkierungen in Quellcode-Editoren haben
  • Metrikergebnisse untersuchen
  • Exportieren Sie Metrikergebnisse als Tag Cloud (als optionale Funktion über die Update-Site verfügbar).

Derzeit enthält der Metriker die folgenden Metriken:

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

1

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


1

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


2
Habe eines der PDFs über MELT und das Erweitern von gcc mit Schmelze gelesen. Mein Gefühl ist, dass es immer noch zu komplex / schwierig ist, eigene Plugins zu gcc hinzuzufügen. Nicht praktischer Weg für gewöhnliche Benutzer.
Zhaorufei

1
Das Erweitern von GCC ist komplex, egal wie Sie es tun (über C-Plugins, über MELT oder sogar über Python). Dies liegt daran, dass GCC komplex ist. Das Anpassen eines statischen C ++ - Analysetools ist schwierig, da die C ++ - Sprachspezifikation sehr komplex ist und Sie den größten Teil dieser Komplexität bewältigen müssen (jedes nicht triviale C ++ - Programm verwendet viele C ++ - Funktionen, möglicherweise über die C ++ - Standardbibliothek). .
Basile Starynkevitch

0

Doxygen führt einige Kontrollflussanalysen durch und generiert Diagramme. Das ist vielleicht nicht das, wonach Sie suchen, aber ich habe sie als nützlich erachtet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.