Frage

Ich habe ein großes Vermächtnis C ++ Projekt unter Visual Studio kompiliert 2008. Ich weiß, es ist eine ziemlich Menge von ‚toten‘ Code, der nicht überall zugegriffen wird -. Methoden, die nicht genannt werden, ganzer Klassen, die nicht verwendet werden

Ich bin auf der Suche nach einem Werkzeug, dass dies durch statische Analyse identifizieren .

Diese Frage: Toter Code-Erkennung in Legacy-C / C ++ Projekt schlägt vor, Code-Coverage-Tools. Dies ist keine Option, da die Testabdeckung einfach nicht hoch genug ist.

Er erwähnt auch einen -Wunreachable-Code. Option gcc. Ich würde etwas ähnliches für Visual Studio mag. Wir verwenden bereits den Linker des / OPT: REF Option redundanten Code zu entfernen, aber dieser Bericht nicht den toten Code auf einem nützlichen Niveau (bei / VERBOSE gibt es mehr als 100.000 Zeilen verwendet, darunter eine Menge von Bibliotheken)

Gibt es bessere Möglichkeiten, die gut mit einem Visual Studio-Projekt arbeiten?

War es hilfreich?

Lösung

Sie werden etwas entlang der Linien von QA-C ++ wollen ( http: //www.programmingresearch. com / QACPP_MAIN.html ), siehe auch http://en.wikipedia.org/wiki / List_of_tools_for_static_code_analysis für ähnliche Produkte.

Sie suchen nach einem statischen Code-Analyse-Tool, das nicht erreichbar Code erkennt; viele Code-Richtlinien (wie MISRA-C ++, wenn ich mich nicht irre) verlangen, dass keine unerreichbaren Code vorhanden ist. Eine Analyse Tool, das speziell eine solche Richtlinie zur Durchsetzung ausgerichtet wäre die beste Wahl sein.

Und Sie werden in der Lage wie auch andere Verwendungen für das Werkzeug zu finden.

Andere Tipps

Ich weiß, dass Gimpel der Lint-Produkte ( PC-Lint und FlexeLint ) wird nicht erreichbar Code und ungebraucht / unreferenced Module identifizieren.

Sie fallen beide in die Kategorie der statischen Analysetools.

Ich habe keine Verbindung w / Gimpel, nur ein zufriedener langfristigen Kunden.

Ich weiß nicht, Visual C, und hatte auch empfohlen, die -Wunreachable-spezifischen Code Coverage Tools. Als Lösung für Ihre Situation versuchen würde ich folgendes:

  1. Stellen Sie mit ctags (oder einem ähnlichen Programm) eine Liste aller Symbole in Ihrer Quelle
  2. Aktivieren in Ihrem Compiler die Beseitigung von totem Code (ich würde es Standardwerte übernehmen zu auf)
  3. Aktivieren Sie Ihre gesamtes Programm / link Zeitoptimierungen (so weiß er, dass Funktionen, die nicht in Ihrem Module verwendet werden, die nicht von anderen Äußerlichkeiten erforderlich und verworfen werden)
  4. Nehmen Sie die Symbole aus dem binären und vergleicht sie mit den Symbolen von 1.

Ein weiterer Ansatz könnte einige Aufrufgraphen Werkzeug zum Erzeugen (z doxygen).

Ich schlage vor, Sie ein paar Ansätze verwenden: 1. GCC hat einige nützliche Zusammenstellung Fahnen:

-Wunused-function
-Wunused-label
-Wunused-value
-Wunused-variable
-Wunused-parameter
-Wunused-but-set-parameter

2. Cppcheck hat einige nützliche Funktionen wie:

 --enable=unusedFunction

3. Verwenden Sie statischen Analysator wie war vorschlagen vor.

Ein Ansatz, der für mich arbeitet - mit Delphi -. Ist das Debuggen zu aktivieren, und das Programm unter dem Debugger ausführen

Wenn ein Delphi-Programm unter dem Debugger ausgeführt wird, zeigt die IDE an den Rand der Codezeilen als Haltepunkte festgelegt werden. Code, der wirklich tot ist - d. H wird durch den Linker aus / Compiler ist offensichtlich, wie Breakpoints können nicht eingestellt werden dort abgezogen worden

Einige zusätzliche Hinweise, wie commen scheint dies falsch zu verstehen:

a: Sie brauchen nicht zu versuchen, in jeder Zeile einen Haltepunkt zu setzen. Öffnen Sie einfach die Quelldatei in der IDE auf, und schnell scrollen durch. Toter Code ist leicht zu erkennen.

b: Dies ist kein 'Code-Coverage' zu überprüfen. Sie müssen nicht um die Anwendung auszuführen, um zu sehen, ob es die Linien erreicht.

c: Ich bin nicht vertraut genug VS2008 kann so nicht sagen, ob dieser Vorschlag funktionieren wird.

Entweder
1) MSVC des Unter verwendet eingebaut statisches Analysewerkzeug .
2) Der MSVC Marktplatz bietet zahlreiche Tools, einschließlich der Unterstützung für die meisten kostenlose Tools, einschließlich cppcheck

Sie die neueste Version von Visual Studio, bei Marketplace-Anwendungen benötigen, sondern auch die „ Community Edition “hat sehr nachsichtig Lizenzierung.

ein Skript schreiben, die zufällig eine Funktion löscht (aus dem Quellcode) und neu kompiliert alles von Grund auf neu. Wenn es immer noch kompiliert -. Diese Funktion war tot Code

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top