39 Stimmen

Wie kann ich Perf dazu bringen, Symbole in meinem Programm zu finden?

Bei der Verwendung von perf report Ich sehe keine Symbole für mein Programm, stattdessen erhalte ich eine Ausgabe wie diese:

$ perf record /path/to/racket ints.rkt 10000
$ perf report --stdio

# Overhead   Command      Shared Object  Symbol
# ........  ........  .................  ......
#
    70.06%  ints.rkt  [unknown]          [.] 0x5f99b8        
    26.28%  ints.rkt  [kernel.kallsyms]  [k] 0xffffffff8103d0ca
     3.66%  ints.rkt  perf-32046.map     [.] 0x7f1d9be46650  

Das ist ziemlich uninformativ.

Das entsprechende Programm wird mit Debugging-Symbolen erstellt, und die sysprof Tool zeigt die entsprechenden Symbole an, ebenso wie Zoom, das meiner Meinung nach die perf unter der Haube.

Beachten Sie, dass dies auf x86-64 läuft, so dass die Binärdatei mit -fomit-frame-pointer aber das ist auch bei den anderen Tools der Fall.

0voto

yzark Punkte 101

Können Sie den Wert von kptr_restrict überprüfen, indem Sie cat /proc/kallsyms . Wenn die Adressen der Symbole im Ergebnis alle 0x000000 sind, können Sie dies mit dem Befehl echo 0 > sys/kernel/kptr_restrict . Danach können Sie ein gewünschtes Ergebnis der perf report

-1voto

jumper Punkte 192

Wie sieht es mit Ihrem Dev-Host-Rechner aus? Läuft dort auch das x86_64-Betriebssystem? Wenn nicht, stellen Sie bitte sicher, dass das Perf cross-compiliert ist, da das Perf von objdump und anderen Tools in der Toolchain abhängt.

-1voto

Nik_ Punkte 146

Ich habe das gleiche Problem mit Perf. nachdem ich den Namen meines Programms über prctl(PR_SET_NAME)

Wie ich sehen kann, ist Ihr Fall ziemlich ähnlich:

70.06% ints.rkt [unbekannt]

Befehl, den Sie ausgeführt haben ( Schläger ) ist anders als der Perf. gesehen haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X