Frage

Ich arbeite an einem Projekt, bei dem ich in C in einer UNIX-Umgebung programmiere.Ich habe das Lint-Tool verwendet, um meinen Quellcode zu überprüfen.Lint gibt es schon seit langer Zeit (seit 1979). Kann mir jemand ein neueres Code-Analysetool vorschlagen, das ich verwenden könnte?Am besten ein kostenloses Tool.

War es hilfreich?

Lösung

Übersehen Sie nicht den Compiler selbst.

Lesen Sie die Dokumentation des Compilers und suchen Sie nach allen möglichen Warnungen und Fehlern. Aktivieren Sie dann so viele, wie für Sie sinnvoll sind.

Stellen Sie außerdem sicher, dass Sie Ihren Compiler anweisen, Warnungen wie Fehler zu behandeln, damit Sie sie sofort beheben müssen.("-Werror" auf gcc)

Auch:„-Wall“ auf gcc funktioniert nicht Aktivieren Sie alle Warnungen, lassen Sie sich nicht täuschen.

Auch auch:Schauen Sie sich Valgrind an (kostenlos!) – es „erkennt automatisch viele Speicherverwaltungs- und Threading-Fehler und erstellt ein detailliertes Profil Ihrer Programme.“

Valgrind ist kein statischer Prüfer, aber ein großartiges Tool! http://valgrind.org

Andere Tipps

Für C-Code sollten Sie auf jeden Fall verwenden Flexelint.Ich benutze es fast 15 Jahre lang und schwöre darauf.Eines der wirklich großartigen Features ist, dass Warnungen über Kommentare im Code („/* lint -e123*/“) selektiv ein- und ausgeschaltet werden können.Dies erwies sich als leistungsstarkes Dokumentationstool, wenn Sie etwas Außergewöhnliches wollten.„Ich schalte Warnung X aus, daher gibt es einen guten Grund, warum ich X ausführe.“

Wenn Sie sich für interessante C/C++-Fragen interessieren, schauen Sie sich einige Beispiele auf der Website an und sehen Sie, ob Sie die Fehler herausfinden können, ohne auf die Hinweise zu achten.

Ich habe Gutes darüber gehört Clang-Statikanalysator, wobei IIRC LLVM als Backend verwendet.Wenn das auf Ihrer Plattform implementiert ist, könnte das eine gute Wahl sein.

Soweit ich weiß, leistet es etwas mehr als nur eine Syntaxanalyse.Zum Beispiel „Automatische Fehlersuche“.

Wir haben verwendet Coverity Prevent um den C++-Quellcode auszuprobieren.

Es ist kein kostenloses Tool (obwohl ich glaube, dass sie kostenloses Scannen für Open-Source-Projekte anbieten), aber es ist eines der besten statischen Analysetools, die Sie finden können.Ich habe gehört, dass es unter C noch beeindruckender ist als unter C++, aber es hat uns bisher dabei geholfen, eine ganze Reihe von Fehlern zu vermeiden.

Ich habe kürzlich eine Liste aller mir zur Verfügung stehenden statischen Analysetools zusammengestellt und bin noch dabei, sie alle zu evaluieren.Beachten Sie, dass es sich hierbei hauptsächlich um Tools zur Sicherheitsanalyse handelt.

Sie können verwenden cppcheck.Es ist ein einfach zu verwendendes Tool zur statischen Codeanalyse.
Zum Beispiel:
cppcheck --enable=all .
überprüft alle C/C++-Dateien im aktuellen Ordner.

Bei fusselartigen Werkzeugen besteht im Allgemeinen das Problem eines „Fehlalarms“:Sie melden viel mehr Probleme, als tatsächlich existieren.Ist der Anteil wirklich nützlicher Warnungen zu gering, lernt der Nutzer, das Tool einfach zu ignorieren.Modernere Tools investieren einen gewissen Aufwand, um sich auf die wahrscheinlichsten/interessantesten Warnungen zu konzentrieren.

PC-Fussel/Flexelint sind sehr leistungsstarke und nützliche statische Analysetools und hochgradig konfigurierbar, wenn auch leider nicht kostenlos.

Wenn ein Tool wie dieses zum ersten Mal verwendet wird, kann es zu einer großen Anzahl von Warnungen kommen, die es schwierig machen können, zwischen größeren und kleineren Warnungen zu unterscheiden.Daher ist es am besten, das Tool so früh wie möglich im Projekt für Ihren Code zu verwenden und es dann so oft wie möglich für Ihren Code auszuführen, damit Sie mit neuen Warnungen umgehen können, sobald diese auftreten.

Bei kontinuierlicher Verwendung auf diese Weise lernen Sie schnell, Ihren Code so zu schreiben, dass er den vom Tool angewendeten Regeln entspricht.

Aus diesem Grund bevorzuge ich Tools wie Lint, die relativ schnell laufen und daher eine kontinuierliche Verwendung fördern, gegenüber den umständlicheren Tools, die Sie möglicherweise seltener oder gar nicht verwenden.

Du kannst es versuchen CppDepend, ein ziemlich vollständiger statischer Analysator, der unter Windows und Linux über das VS-Plugin, die IDE oder die Befehlszeile verfügbar und kostenlos ist Open-Source-Mitwirkende

Vielleicht finden Sie das Uno-Tool nützlich.Es ist eine der wenigen kostenlosen Optionen, die kein Spielzeug sind.Es unterscheidet sich von Lint, Flexelint usw.bei der Konzentration auf eine kleine Anzahl von „semantischen“ Fehlern (Nullzeiger-Derefs, außerhalb der Grenzen liegende Array-Indizes und Verwendung nicht initialisierter Variablen).Es ermöglicht auch benutzerdefinierte Prüfungen, z. B. die Sperr- und Entsperrdisziplin.

Ich arbeite an der Veröffentlichung eines Nachfolgetools. Orion (INHALT NICHT MEHR VERFÜGBAR)

Es gibt eine Option „-Weffc++“ für gcc, die laut Mac OS X-Manpage Folgendes bewirkt:

Warnen Sie vor Verstößen gegen die folgenden Stilrichtlinien aus dem Buch „Effective C++“ von Scott Meyers:

[schnipsen]

Ich weiß, dass Sie nach C gefragt haben, aber das kommt mir am nächsten.

Fussel wird ständig aktualisiert...Warum sollten Sie also eine neuere Version haben?

Übrigens Flexelint Ist Fussel

Tag auch,

Ich stimme den Vorschlägen voll und ganz zu, zu lesen und zu verarbeiten, was Ihnen der Compiler nach dem Festlegen von -Wall sagt.

Ein gutes statisches Analysetool für die Sicherheit ist FehlerFinder geschrieben von David Wheeler.Es leistet gute Arbeit bei der Suche nach verschiedenen Sicherheitslücken.

Es ersetzt jedoch nicht, dass eine sachkundige Person Ihren Code durchliest.Wie David auf seiner Webseite sagt: „Ein Narr mit einem Werkzeug ist immer noch ein Narr!“

Prost,

rauben

Ich habe festgestellt, dass es im Allgemeinen am besten ist, mehrere statische Analysetools zu verwenden, um Fehler zu finden.Jedes Werkzeug ist anders gestaltet und sie können sehr unterschiedliche Dinge finden.

In manchen Vorträgen gibt es gute Diskussionen Hier.Es stammt von einer Konferenz des US-Heimatschutzministeriums zum Thema statische Analyse.

Spärlich ist ein Computersoftwaretool, das bereits unter Linux verfügbar ist und dazu dient, mögliche Codierungsfehler im Linux-Kernel zu finden.

Es gibt zwei aktive Projekte von Linux-Verifizierungscenter zielte darauf ab, die Qualität der ladbaren Kernelmodule zu verbessern.

  1. Linux Driver Verification (LDV) – ein umfassendes Toolset für die statische Quellcode-Verifizierung von Linux-Gerätetreibern.
  2. KEDR Framework – ein erweiterbares Framework für die dynamische Analyse und Überprüfung von Kernelmodulen.
  3. Ein weiteres laufendes Projekt ist die Linux File System Verification, das darauf abzielt, ein spezielles Toolset zur Überprüfung von Linux-Dateisystemimplementierungen zu entwickeln.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top