2017-08-01 66 views
1

我正在尝试使用perf来获取有关系统中堆栈回溯的信息。 我编译的主要调用f,f调用g1,g1调用g3,g3调用g4,g4调用g2的应用程序。 我希望我的backtrases是像在armv7l上Perf堆栈回溯

  • G2
  • G4
  • G3
  • G1
  • ˚F
  • 主要

不过,我后来也出现回溯中perf脚本,如

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]) 

如何获得更多关于我的回溯信息?

编译ARM-Linux的gnueabi-GCC -O0 -g3 -marm -fno-省略帧指针-funwind桌的main.c

逆足记录:记录PERF -g -a

Perf脚本:perf脚本

目标在Linux 3.10.65上运行。

回答

0

ARM在perf中的堆栈展开实现存在问题:未在某个时刻实施。 尝试最近的内核和/或最新版本的perf(新的perf工具将在旧内核上工作,但backtrace读取的一部分在内核中)。

https://wiki.linaro.org/LEG/Engineering/TOOLS/perf-callstack-unwinding(还提到有:How does linux's perf utility understand stack traces?

Linux的PERF具有特定结构的支持代码。 x86有一些矮小的堆栈帧展开支持,而arm和arm64则不支持。它应该在ARM32/64上实现。 ARMv7的工作是在LEG-760蓝图下完成的。预期的结果是perf输出统计中的用户和内核调用链的回溯。

支持在2013年9月后COMMITED:http://www.spinics.net/lists/kernel/msg1608919.html3.10 is from june 2013

从3.11或任何较新版本的内核尝试内核& perf。