2010-11-16 6 views
9

Hey Leute, ich suchte nach einer Möglichkeit, statisch nicht erreichbare Funktionen in einem (sehr) großen C++ Projekt zu finden. Ich hatte versucht, Doxygen und andere statische Analyse-Tools zu verwenden, die hier vorgeschlagen wurden, aber es schien, dass das Projekt zu kompliziert für sie ist. Schließlich entschied ich, dass die Verwendung von GCC-Tools (g ++, gprof, gcov, etc.) die sicherste Option ist, obwohl ich nicht herausfinden konnte, wie es geht. Ich denke, dass die g ++ - Optimierungen statisch nicht erreichbare Funktionen eliminieren, aber ich bin nicht sicher, wie man die Namen der Funktionen erhält, die es beseitigt.GCC verwenden, um nicht erreichbare Funktionen zu finden ("toter Code")

Haben Sie Vorschläge?

Danke!

+1

http://stackoverflow.com/questions/229069/dead-code-detection-in-legacy-cc-project – Veger

Antwort

7

Dead-Code-Optimierung wird in der Regel durch den Linker durchgeführt - der Compiler hat nicht den Überblick. Der Compiler hat jedoch möglicherweise nicht verwendete static-Funktionen eliminiert (da sie interne Verknüpfungen haben).

Daher sollten Sie nicht auf GCC-Optionen, sondern auf LD-Optionen aussehen. Es scheint, Sie wollen --print-gc-sections. Beachten Sie jedoch, dass Sie wahrscheinlich möchten, dass GCC jede Funktion in einen eigenen Abschnitt einfügt, -ffunction-sections. Standardmäßig wird GCC alle Funktionen in den gleichen Abschnitt einfügen, und LD ist nicht schlau genug, um nicht verwendete Funktionen zu eliminieren - es kann nur ungenutzte Abschnitte eliminieren.

-1

gcov ist was du suchst. Du hast das in der Frage aufgelistet, hast du es nicht angeschaut?

+5

Nicht wirklich, "gcov erstellt eine Protokolldatei namens sourcefile.gcov, die angibt, wie oft jede Zeile von a Quelldatei sourcefile.c wurde ausgeführt. " Dies ist eine dynamische Analyse, die nicht statisch ist. – stnr