Was ist ein sehr einfacher C++-Profiler (VC++)?

Lesezeit: 5 Minuten

Ich habe in der Vergangenheit einige Profiler verwendet und fand sie nie besonders einfach. Vielleicht habe ich schlechte ausgewählt, vielleicht wusste ich nicht wirklich, was ich erwartet hatte! Aber ich würde gerne wissen, ob es “Standard”-Profiler gibt, die einfach vorbeikommen und funktionieren? Ich glaube nicht, dass ich extrem detaillierte Berichte brauche, nur um große Schwachstellen aufzuspüren. An dieser Stelle ist mir die Benutzerfreundlichkeit wichtiger.

Es ist VC++ 2008, das wir verwenden (ich verwende persönlich die Standard Edition). Ich nehme nicht an, dass es dafür Tools in der IDE gibt, ich kann keine sehen, wenn ich mir die Hauptmenüs ansehe?

  • siehe stackoverflow.com/questions/67554/…

    – Sajad Bahmani

    12. April 2010 um 19:18 Uhr

Was ist ein sehr einfacher C Profiler VC
Michael myers

Ich schlage eine sehr einfache Methode vor (die ich durch das Lesen von Mike Dunlaveys Posts auf SO gelernt habe):

Unterbrechen Sie einfach das Programm.

Führen Sie dies mehrmals durch, um eine angemessene Probe zu erhalten. Wenn eine bestimmte Funktion die Hälfte der Ausführungszeit Ihres Programms beansprucht, stehen die Chancen gut, dass Sie sie sehr schnell auf frischer Tat ertappen.

Wenn Sie die Leistung dieser Funktion um 50 % verbessern, haben Sie die Gesamtausführungszeit nur um 25 % verbessert. Und wenn Sie feststellen, dass es überhaupt nicht benötigt wird (ich habe in der kurzen Zeit, in der ich diese Methode verwende, mehrere solcher Fälle gefunden), haben Sie die Ausführungszeit nur halbiert.

Ich muss gestehen, dass ich anfangs ziemlich skeptisch gegenüber der Wirksamkeit dieses Ansatzes war, aber nachdem ich es ein paar Wochen lang ausprobiert habe, bin ich begeistert.

  • ++ Ja, ich fürchte, ich habe mich zu einer königlichen Plage gemacht, indem ich für diese Technik geworben habe, aber verdammt noch mal, es funktioniert. (Das Wichtigste ist, sich den Call-Stack anzusehen. Manchmal sagen die Leute: “Das ist in irgendeiner Systemroutine – was nützt das?”, wenn das Problem ein paar Ebenen höher offensichtlich ist.)

    – Mike Dunlavey

    12. April 2010 um 20:01 Uhr

  • Ich war skeptisch. Aber ich kann bestätigen, dass das tatsächlich funktioniert. Vor allem, wenn Ihr Programm merklich langsam arbeitet. Das Beste daran ist, dass keine Code-Hooks erforderlich sind.

    – dev_nut

    23. März 2016 um 21:53 Uhr

Was ist ein sehr einfacher C Profiler VC
Brian R. Bondy

VS eingebaut:

Wenn Sie eine Team Edition haben, können Sie die verwenden Visual Studio-Profiler.


Andere Optionen:

Ansonsten schau mal in diesen Thread.


Einfach selbst erstellen:

Ich persönlich verwende eine intern erstellte, die auf der Win32-API basiert QueryPerformanceCounter. Sie können etwas nettes und einfach zu verwendendes innerhalb von hundert Zeilen Code oder weniger erstellen.

Der Vorgang ist einfach: Erstellen Sie oben in jeder Funktion, die Sie profilieren möchten, ein Makro mit dem Namen PROFILE_FUNC(), das zu den intern verwalteten Statistiken hinzugefügt wird. Dann haben Sie ein weiteres Makro namens PROFILE_DUMP(), das die Ausgaben in ein Textdokument ausgibt.

PROFILE_FUNC() erstellt ein Objekt, das RAII verwendet, um die Zeitspanne bis zur Zerstörung des Objekts zu protokollieren. Sowohl der Konstruktor dieses RAII-Objekts als auch der Destruktor rufen auf QueryPerformanceCounter. Sie könnten diese Zeilen auch in Ihrem Code belassen und das Verhalten über a steuern #define PROFILING_ON

  • Ich versuche es mit Sleepy, bin mir aber noch nicht ganz sicher.

    – Herr Junge

    12. April 2010 um 19:55 Uhr

  • Ich habe es gehasst, wie Microsoft ein großartiges Tool (Visual Studio Professional) genommen und großartige Funktionen wie den Profiler preislich völlig außerhalb meiner Reichweite preisgegeben hat. Anstatt also garantiert 600 $ von mir zu bekommen, werde ich einfach mingw benutzen und Trial-and-Error verwenden.

    – Chris K

    12. April 2010 um 20:07 Uhr

  • @j_random_hacker: Ich schätze, ich bin daran gewöhnt, dass Produkt-Upgrades mir neue Sachen geben, anstatt mir Dinge wegzunehmen, auf die ich früher Zugriff hatte. Visual Studio 6 Professional hat mir einen Profiler gegeben – ich müsste Visual Studio Premium kaufen, um diese Funktion heute zu erhalten. 699 $ im Jahr 1998 gegenüber 4300 $ heute. Anspruch auf meinen Arsch. Das ist Aushöhlen.

    – Chris K

    1. November 2011 um 23:33 Uhr

  • @Chris: Tut mir leid, schlechtes Leseverständnis meinerseits – ich dachte, Sie beschweren sich, dass die kostenlose Express Edition Ihnen keinen Profiler bietet und dass Sie 600 US-Dollar bezahlen müssten, um ihn zu bekommen. Wie Sie würde ich auch einen Profiler in einer Ausgabe namens “Professional” erwarten.

    – j_random_hacker

    2. November 2011 um 3:59 Uhr

  • @j_random_hacker: Keine Sorge – ich mag auf jeden Fall die Express Edition-Produkte von Microsoft (SQL, Visual Studio).

    – Chris K

    2. November 2011 um 19:41 Uhr

Ich habe immer AMD CodeAnalyst verwendet, ich finde es ziemlich einfach zu bedienen und liefert interessante Ergebnisse. Ich habe immer das zeitbasierte Profil verwendet, in dem ich festgestellt habe, dass es gut mit den Debug-Informationen meiner Apps zusammenarbeitet, sodass ich herausfinden kann, wo die Zeit auf der Ebene von Prozeduren, C++-Anweisungen und einzelnen Assembler-Anweisungen aufgewendet wird.

ich benutzte lt. Prof in der Vergangenheit für einen schnellen Überblick über meine C++-App. Es funktioniert ziemlich einfach und läuft mit einem kompilierten Programm, benötigt keine Quellcode-Hooks oder Tweaks. Es gibt eine Testversion, glaube ich.

Eine sehr einfache (und kostenlose) Methode zur Profilerstellung besteht darin, die Windows-Debugger (cdb/windbg) zu installieren, einen bp für den Ort von Interesse zu setzen und die wt Befehl (“Trace and Watch Data”). Kasse MSDN Für mehr Information.

  • ++ Ich habe vor Ewigkeiten windbg verwendet und mich auf die Ctrl-C-Methode verlassen. Wenn ich wollte, dass es langsam läuft, würde ich Watch Data verwenden, wie Sie es empfehlen.

    – Mike Dunlavey

    12. April 2010 um 22:01 Uhr

  • ++ Ich habe vor Ewigkeiten windbg verwendet und mich auf die Ctrl-C-Methode verlassen. Wenn ich wollte, dass es langsam läuft, würde ich Watch Data verwenden, wie Sie es empfehlen.

    – Mike Dunlavey

    12. April 2010 um 22:01 Uhr

914520cookie-checkWas ist ein sehr einfacher C++-Profiler (VC++)?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy