2010-01-27 21 views
6

Zajmuję się tworzeniem aplikacji w C++ w systemie Windows XP, używając Eclipse jako mojego IDE i systemu kompilacji opartego na Makefile (z niestandardowymi narzędziami do generowania plików Makefile). Ponadto używam LZZ, co pozwala mi napisać pojedynczy plik, który następnie zostaje podzielony na nagłówek i plik implementacji. Używam portu GCC TDM.Jak mogę profilować kompletną kompilację C++?

Jakie narzędzia lub techniki mogę użyć do określenia, ile czasu zajmuje każda część procesu kompilacji i dlaczego jest wolna?

Szczególnie interesujące byłoby:

  • Ile czasu robi trzeba dowiedzieć się do analizowania Makefile, dowiedzieć się zależności, sprawdź znaczniki czasu, itp?
  • Ile czasu potrzebuje Eclipse przed i po kompilacji?
  • Ile czasu GCC wydaje na system parsowania i nagłówki doładowania?

P.S .: To jest mój projekt domu, więc drogie narzędzia są poza zasięgiem dla mnie, ale może być udokumentowane tutaj w każdym razie, jeśli są one szczególnie istotne.

Odpowiedz

6

Ponieważ Make i GCC są bardzo gadatliwi na temat tego, co robią, bardzo prostym sposobem uzyskania wysokiego poziomu ogólnego przeglądu czasu jest wyliczenie wyniku potoku przez skrypt, który sygnalizuje czasem każdą linię:

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

(Używam do tego celu ActivePerl, ale z tego Domyślam się, że Strawberry Perl może być teraz zalecaną wersją Perla dla systemu Windows.)

Przeformatuj lub przetwórz sygnatury czasowe zgodnie z własnymi upodobaniami.

Aby uzyskać więcej szczegółowych informacji o GCC, użyj opcji --time-report.

Aby dowiedzieć się, ile dodatkowego obciążenia Eclipse dodaje, użyj stopera, aby skompilować czas z Eclipse iz wiersza poleceń.

1

jeśli używasz doładowania, najprawdopodobniej większość czasu poświęcana jest na tworzenie szablonu i późniejszą optymalizację. Możesz powiedzieć GCC, aby zgłosić czas spędzony, -time-report (opcja UNIX, może być czymś innym na Windows GCC)

i jeśli próbujesz przyspieszyć swój czas kompilacji, wyłącz optymalizację, -O0 (ostatnia litera to zero, najpierw List jest kapitałem o)

1

Wypróbuj SparkBuild, darmowy zamiennik gmake/nmake, który może generować adnotowany dziennik kompilacji z dokładnymi informacjami o czasie dla każdego zadania w kompilacji. Możesz załadować ten plik do SparkBuild Insight, aby uzyskać graficzny przegląd miejsca, w którym upływa czas.

Zobacz przykład jak z niego korzystać.

0

Istnieje wersja produktu GNU o nazwie remake, która udostępnia informacje o profilowaniu.

Powiązane problemy