2017-08-01 8 views
1

J'essaie d'utiliser perf pour obtenir des informations sur les backtraces de pile dans mon système. Je compile une application où les appels principaux f, f appelle g1, g1 appelle g3, g3 appelle g4, g4 appelle g2. je mes backtrases être quelque chose commeBacktraces de pile de perf sur armv7l

  • g2
  • g4
  • g3
  • g1
  • f
  • principales

Mais au lieu, j'ai recadrée backtraces en script perf, comme

a.out 2869 [000] 19414.348571:  225426 cycles:ppp: 
        7ac f (/opt/usr/home/owner/a.out) 
       beb3dd2c [unknown] ([unknown]) 

a.out 2869 [000] 19414.348754:  235721 cycles:ppp: 
        72c g1 (/opt/usr/home/owner/a.out) 
       beb3dd24 [unknown] ([unknown]) 

a.out 2869 [000] 19414.348937:  246486 cycles:ppp: 
        670 g3 (/opt/usr/home/owner/a.out) 
       beb3dd14 [unknown] ([unknown]) 

a.out 2869 [000] 19414.349121:  232929 cycles:ppp: 
        60c g4 (/opt/usr/home/owner/a.out) 
       beb3dd04 [unknown] ([unknown]) 

Comment puis-je obtenir plus d'informations sur mes tracés?

Compile: arm-linux-gnueabi-gcc -O0 -g3 -marm -fno-omit-frame-pointer -funwind-tables main.c

fiche Perf: perf dossier -a

Script Perf: script perf

La cible s'exécute sous Linux 3.10.65.

Répondre

0

Problèmes avec l'implémentation de déroulement de pile dans perf pour ARM: Non implémenté à un moment donné. Essayez le noyau récent et/ou la version récente de perf (le nouvel outil perf fonctionnera sur le vieux noyau, mais une partie de la lecture backtrace est dans le noyau). a un code de soutien spécifique de l'architecture

Linux perf:

https://wiki.linaro.org/LEG/Engineering/TOOLS/perf-callstack-unwinding (How does linux's perf utility understand stack traces? aussi là-dessus). x86 dispose d'un support de déroulement de trame de pile naine alors que bras et arm64 n'en ont pas. Il devrait être implémenté sur ARM32/64. Le travail pour ARMv7 est fait sous le modèle LEG-760. Le résultat attendu est la trace de la chaîne d'appel de l'utilisateur et du noyau dans les statistiques de sortie perf.

soutien a été commited après septembre 2013: http://www.spinics.net/lists/kernel/msg1608919.html et 3.10 is from june 2013.

Essayez le noyau & perf à partir de la version 3.11, ou toute version plus récente du noyau.