2010-01-27 9 views
6

Ich entwickle eine Anwendung in C++ unter Windows XP mit Eclipse als meine IDE und ein Makefile-basiertes Build-System (mit benutzerdefinierten Tools, um die Makefiles zu generieren). Außerdem benutze ich LZZ, was mir erlaubt, eine einzelne Datei zu schreiben, die dann in einen Header und eine Implementierungsdatei aufgeteilt wird. Ich benutze den TDM-Port von GCC 4.Wie kann ich einen vollständigen C++ Build profilieren?

Welche Tools oder Techniken kann ich verwenden, um genau zu bestimmen, wie viel Zeit jeder Teil des Build-Prozesses benötigt und warum er langsam ist?

Von besonderem Interesse wäre:

  • Wie viel Zeit braucht man machen, um herauszufinden, die Makefiles zu analysieren, um die Abhängigkeiten herauszufinden, die Zeitstempel überprüfen, etc?
  • Wie viel Zeit benötigt Eclipse vor und nach dem Build?
  • Wie viel Zeit verbringt GCC mit der Analyse von System- und Boost-Headern?

P. S .: Das ist mein home-Projekt, so teuere Werkzeuge für mich außer Reichweite sind, aber trotzdem hier dokumentiert werden könnten, wenn sie besonders relevant sind.

Antwort

6

Da Make und GCC sind sehr wortreich über das, was sie tun, eine sehr grobe Möglichkeit, einen Überblick über die Zeit zu erhalten, ist die Ausgabe über ein Skript pipettieren, die jede Zeile Zeitstempel:

make | perl -MTime::HiRes -pe "printf '%.5f ', Time::HiRes::time()" 

(ich verwende ActivePerl, dies zu tun, aber von dem, was Ich nehme an, Strawberry Perl kann jetzt die empfohlene Perl-Version für Windows sein.)

Reformieren oder verarbeiten Sie die Zeitstempel nach Ihren Wünschen.

Um weitere Details zu GCC zu erhalten, verwenden Sie die Option --time-report.

Um herauszufinden, wie viel Overhead Eclipse hinzufügt, verwenden Sie eine Stoppuhr, um Builds von Eclipse und von der Befehlszeile aus zu zeitgesteuert auszuführen.

1

Wenn Sie Boost verwenden, wird die meiste Zeit für die Instanziierung und anschließende Optimierung von Vorlagen verwendet. Sie können GCC sagen Zeit damit verbracht, -time-report zu berichten (UNIX Option könnte etwas anderes unter Windows GCC sein)

und wenn Sie versuchen, Ihre Übersetzungszeit zu beschleunigen, deaktivieren Sie Optimierung, -O0 (letzte Buchstabe ist die Nummer Null, erste Buchstabe ist Kapital 0)

1

Probieren Sie SparkBuild, eine kostenlose gmake/nmake-Ersatz, die eine annotierte Build-Protokoll mit präzisen Timing-Informationen für jeden Job im Build generieren können. Sie können diese Datei in SparkBuild Insight laden, um eine grafische Übersicht über die Zeit zu erhalten.

Ein Beispiel für die Verwendung finden Sie unter this blog.

0

Es gibt eine Version von GNU make namens remake, die Profilinformationen bereitstellt.

Verwandte Themen