2010-02-20 12 views
7

Ich weiß, ich kann meinen Code mit gprof und kprof auf Linux Profil. Gibt es eine vergleichbare Alternative zu diesen Anwendungen unter Windows?Profil C-Code unter Windows bei der Verwendung von Eclipse

+1

Welchen Compiler verwenden Sie unter Windows? –

+3

Sie können gprof für Windows mit dem MinGW-Port des GCC-Compilers verwenden. –

Antwort

3

Kommerzielle Software:

  • Rational Quantify (teuer, langsam, aber sehr ausführlich)
  • AQTime (weniger teuer, weniger langsam, ein wenig detaillierter)

Freie Software:

Diese kommerziellen Alternativen ändern den kompilierten Code von ‚Instrumentierung‘ (Hinzufügen von Anweisungen), um es auszuführen und das Timing der addierten Anweisungen withing. Dies bedeutet, dass Ihre Anwendung stark verlangsamt wird.

Diese kostenlosen Alternativen verwenden Stichproben, was bedeutet, dass sie weniger detailliert, aber sehr schnell sind. In der Praxis habe ich festgestellt, dass besonders Very Sleepy sehr gut ist, um sich kurz die Performance-Probleme in Ihrer Anwendung anzuschauen.

+0

Ich habe sowohl Very Sleepy als auch Luke StackWalker ausprobiert, aber sie können mir nichts sagen. Sie scheinen keinen Zugriff auf meinen Quellcode zu haben. gprof funktioniert jedoch gut. Woher? Ich mag GUI-basierte Profiler wirklich, aber sie funktionieren nicht. – Pieter

+0

Dieser Fehler wurde von Luke StackWalker erzeugt: 'FEHLER: SymGetModuleInfo64, GetLastError: 1114 (Adresse: 7C90E514)' – Pieter

+0

Ich habe eine separate Frage für dieses Problem hier geöffnet: http://StackOverflow.com/Questions/2302596/Lukes- stackwalker-returns-error-wenn-running-gprof-works-fine – Pieter

0

Ja, können Sie das Profil Code with Visual Studio

+1

Ich bin ein Eclipse-Benutzer, also ist das keine Option für mich. – Pieter

+0

@Pieter: dann bitte geben Sie diese wichtige Klausel in * die Frage * –

+2

In jedem Fall enthalten Visual Studio Standard- und Express-Editionen keinen Profiler. Mit pro gibt es einen einfachen (Befehlszeilen-) Profiler, der, glaube ich, ein separater Download ist und nicht einfach zu benutzen ist. Was Microsoft wollen ist, dass (reiche) Leute Team Suite kaufen. – Steve314

3

Es gibt einen MinGW Hafen von gprof, dass nur etwa die gleiche wie die Linux-Variante funktioniert. Sie können entweder eine volle MinGW installation bekommen (ich denke, gprof ist enthalten, aber nicht sicher) oder erhalten gprof von der MinGW binutils package.

Für Eclipse gibt es TPTP, aber es unterstützt Profilerstellung C/C++ nicht, soweit ich weiß.

0

Was ist der Grund für die Profilerstellung? Möchten Sie a) Zeiten messen und einen Aufrufgraphen erhalten, oder b) Dinge finden, die geändert werden müssen, um den Code schneller zu machen? (Dies sind nicht die gleichen.)

Wenn (b) können Sie this trick verwenden, mit der Schaltfläche Pause in Eclipse.


Hinzugefügt: Vielleicht würde es helfen, einige Erfahrung zu vermitteln, was Performance-Probleme sind tatsächlich wie und wo kann man erwarten, dass sie zu finden. Hier sind einige einfache Beispiele:

  • Einsetzinstrument sort (Ordnung n^2), wobei die Einzelteile sind zu sortierenden Zeichenfolgen, und werden von einem String-Vergleichsfunktion verglichen. Wo ist der Hot-Spot? im Zeichenkettenvergleich. Wo ist das Problem? In der Art, in der der String-Compare aufgerufen wird. Wenn n = 10, ist das kein Problem, aber wenn n = 1000 ist, dauert es plötzlich sehr lange. Der Punkt, an dem das Zeichenfolgenvergleich aufgerufen wird, ist "kalt", aber das ist das Problem. Eine kleine Anzahl von Stichproben des Call-Stacks zeigt sie mit Sicherheit an.

  • Eine App, die Plugins lädt, benötigt eine lange Zeit, um zu starten. Ein Profiler sagt grundsätzlich alles darin ist "kalt". Etwas, das die E/A-Zeit misst, sagt, dass es fast die gesamte E/A-Zeit ist, was wie zu erwarten ist, also könnte es hoffnungslos erscheinen.Stack-Samples zeigen jedoch, dass ein Großteil der Zeit, die mit dem Stack verbracht wird, etwa 20 Layer tief in den Prozess des Lesens des Ressourcenteils von Plugin-DLLs für den Zweck der Umwandlung von String-Konstanten in die lokale Sprache verbracht wird. Wenn Sie weiter nachforschen, stellen Sie fest, dass die meisten der übersetzten Strings nicht die Art sind, die tatsächlich Übersetzung benötigen. Sie wurden nur "für den Fall" eingefügt, dass sie Übersetzung brauchten, und wurden nie als etwas betrachtet, das ein Leistungsproblem verursachen könnte. Die Behebung dieses Problems bringt eine erhebliche Zeitersparnis.

So ist es üblich, im Sinne von „Hotspots“ und „Engpässe“, aber die meisten Programme zu denken, vor allem die größeren, sind in der Regel Performance-Probleme in Form von Funktion haben Anrufe Arbeit anfordert, die nicht der Fall ist muss wirklich getan werden. Zum Glück zeigen sie sich auf dem Call-Stack während der Zeit, die sie ausgeben.

+0

Ich bin daran interessiert zu sehen, welche Teile meines Codes länger dauern, um eventuelle Ineffizienzen zu erkennen. – Pieter

+0

@Pieter: Ineffizienzen zu finden ist (b). Ich versuche das zu verbreiten. Hier ist ein weiterer Versuch: http://stackoverflow.com/questions/2308026/which-has-been-the-most-reliable-fastest-windows-c-profiler-that-you-have-used/2311117#2311117 –

+0

Klingt kompliziert für einen C-Neuling wie mich. Meine ideale Profilerstellung sollte in der Lage sein, eine Heatmap über meinen Code zu legen, um zu sehen, welche Befehle am längsten ausgeführt werden. Einige Codes benötigen zwar mehr Verarbeitungszeit, ich weiß, aber es gibt viele Fälle, in denen dies die oben genannten Ineffizienzen erkennen könnte. – Pieter

Verwandte Themen