Como fazer com que o 'perf perf record' trabalhe com símbolos libc e libstdc ++?

12

Estou usando o perf record -g no x86-64 Linux para criar um perfil de um programa. Vários símbolos em libc ou libstdc ++ possuem 0 como pai: __GI___strcmp_ssse3 (libc) e strcmp@plt (libstdc ++) por exemplo. (Eu posso realmente quebrar esses símbolos no depurador e obter um backtrace.)

Adoraria saber quais são os principais responsáveis pela chamada dessas funções e por que não estão gravadas. Isso ocorre porque libc e libstdc ++ não têm ponteiros de quadro em x86_64? E, praticamente, há alguma maneira de contornar isso?

    
por Benjamin Redelings 23.05.2012 / 15:17

2 respostas

5

Essa é uma pergunta antiga, mas isso agora é possível com --call-graph dwarf . Na página man:

 -g
       Enables call-graph (stack chain/backtrace) recording.

   --call-graph
       Setup and enable call-graph (stack chain/backtrace) recording, implies -g.

           Allows specifying "fp" (frame pointer) or "dwarf"
           (DWARF's CFI - Call Frame Information) as the method to collect
           the information used to show the call graphs.

           In some systems, where binaries are build with gcc
           --fomit-frame-pointer, using the "fp" method will produce bogus
           call graphs, using "dwarf", if available (perf tools linked to
           the libunwind library) should be used instead.

Eu acredito que isso requer um kernel Linux recente (> = 3,9? Eu não tenho certeza). Você pode verificar se o pacote perf da distro está vinculado à libdw ou libunwind com readelf -d $(which perf) | grep -e libdw -e libunwind . No Fedora 20, o perf está ligado à libdw.

    
por 18.02.2015 / 04:35
-2

perf é uma ferramenta do kernel que mostra o tempo decorrido para chamadas do sistema. Você está procurando pelo GNU gprof. "gprof - exibir dados do perfil do grafo de chamadas". Para usar o gprof você precisa compilar suas fontes com a opção -pg .

Além disso, há muitas ferramentas de criação de perfil sofisticadas, como eclipse-cdt-profiling-framework .

    
por 02.01.2014 / 19:40