Wykryć, czy plik binarny ELF został zbudowany z oprzyrządowaniem gprof?


11

Czy można sprawdzić, czy dany program został skompilowany z instrumentacją GNU gprof, tj. Z flagą „-pg” przekazaną zarówno do kompilatora, jak i linkera, bez uruchamiania go, aby sprawdzić, czy wygeneruje gmon.outplik?

Odpowiedzi:


10

Można sprawdzić odniesienia do funkcji mcount(lub ewentualnie _mcountczy __mcountwedług Wdrażania Profilowanie ). Ta funkcja jest niezbędna do profilowania, aby działała i powinna być nieobecna w przypadku nieprofilowanych plików binarnych.

Coś jak:

$ readelf -s someprog | egrep "\s(_+)?mcount\b" && echo "Profiling is on for someprog"

Powyżej działa tutaj szybki test.


2

Wyrażenie regularne w powyższej odpowiedzi nie zawsze działa ... ale ogólna idea grepping dla „mcount” w danych wyjściowych „readelf -s [binary]” jest poprawna, myślę


0

Dodając więcej do odpowiedzi:

  1. Aby sprawdzić instrumentację, grep dla mcount / gmon:

    $  readelf -s <binary> | egrep "gmon|mcount"    
    20: 0000000000401160    63 FUNC    GLOBAL DEFAULT   12 __gmon_start__    
    28: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@GLIBC_2.2.5 (2)    
    36: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS gmon-start.c    
    39: 00000000004011a0     0 FUNC    LOCAL  DEFAULT   12 call_gmon_start    
    100: 0000000000401160    63 FUNC    GLOBAL DEFAULT   12 __gmon_start__    
    114: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND mcount@@GLIBC_2.2.5    
    
  2. Należy skompilować, a także połączyć z -pgflagami, w przeciwnym razie gmon.outnie zostaną wygenerowane. link do nakładania stosu.

  3. Odkryłem, że plik binarny, na którym działałem, gprof nie wygenerował żadnego gmon.outpliku, pomimo kompilacji / dowiązania z -pgflagą. Powodem było to, że - zabijałem moją aplikację, nie było to czyste wyjście. gprofgeneruje wyjście tylko wtedy, gdy program kończy się normalnie. link do nakładania stosu

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.