Ich wollte eine Aufnahme machen, um einige Programme zu profilieren, nachdem ich this von CppCon 2015 sprechen gesehen habe. Ich habe die gleiche Google Benchmark-Bibliothek heruntergeladen, die der Typ in der Diskussion verwendet, mein Programm mit den entsprechenden Switches kompiliert , verknüpfte es mit ihm und verwendete dann perf, um einen Lauf aufzuzeichnen. Der Bericht Option gibt mir dies:Perf zeigt verfälschte Funktionsnamen
Wie Sie die Funktionsnamen sehen können, sind nicht sehr gut lesbar. Ich nehme an, dass dies mit C++ - Namensfehlern zu tun hat. Interessanterweise erscheinen alle Funktionsnamen im Video für den Typ, der das Gespräch gehalten hat, aber nicht für mich. Ich glaube nicht, dass die Symbolinformationen vollständig fehlen, weil ich in diesem Fall nur Speicheradressen sehen würde. Aus irgendeinem Grund kann perf den C++ - Namen, der für mich fehlt, nicht "rückgängig machen", und das ist frustrierend anzusehen.
Ich bin mit gcc (g ++) Version 5.2.1, perf ist Version 4.2.6, und ich verwende diese Schalter beim Kompilieren:
-I<my own include path> -L<path to the benchmark library> -O3 -std=c++14 -gdwarf-2 -fno-rtti -Wall -pedantic -lbenchmark -pthread
Der Grund, warum ich nicht -fno-omit-frame-pointer
verwenden ist, dass ich stattdessen die Option -gdwarf-2
verwende, die Debugging-Informationen in der ausführbaren zwerg-Datei zurücklässt, die eine Alternative ist, den Frame-Zeiger in diesem Fall an Ort und Stelle zu lassen. Dies bedeutet auch, dass ich --call-graph "dwarf"
an perf record
übergebe. Wie auch immer, ich habe auch die Frame-Pointer-Methode ausprobiert, und es gibt die gleichen Ergebnisse, also spielt das keine Rolle.
Warum also "perfom" nicht den C++ - Namen Mangling in diesem Fall? Hat das etwas mit der Verwendung von GCC zu tun, was natürlich bedeutet, dass ich libstdC++ benutze?
Ich benutze Arch Linux und 'Perf-Bericht' zeigt korrekte Symbol-Demandging. Die man-Seite für perf zeigt auch an, dass die Option '--demangle' aktiviert ist, die standardmäßig aktiviert ist. Da ich nicht das gleiche Verhalten wie Sie sehe, habe ich keine Antwort, aber was Sie sehen, ist nicht Standardverhalten erwartet. –
Ich habe versucht, diesen Schalter auch manuell hinzufügen, aber es hat nichts geändert – adam10603
@GabrielSouthern Verwenden Sie auch gcc? – adam10603