Gprof enstrümantasyonu ile bir ELF ikili oluşturulduğunu tespit ettiniz mi?


11

O verilen programı GNU gprof enstrümantasyon ile derlendi olmadığını kontrol etmek mümkün mü yani birlikte, derleyici ve bağlayıcı hem iletilen 'dekarboksi' bayrak olmadan bir üretecektir eğer kontrol etmek çalıştıran gmon.outdosyayı?

Yanıtlar:


10

İşlev referanslarını mcount(veya muhtemelen _mcountveya Profil Oluşturma Uygulamasına__mcount göre ) kontrol edebilirsiniz. Bu işlev, profil oluşturmanın çalışması için gereklidir ve profilsiz ikili dosyalar için mevcut olmamalıdır.

Gibi bir şey:

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

Yukarıdakiler burada hızlı bir test üzerinde çalışır.


2

Yukarıdaki cevaptaki düzenli ifade her zaman işe yaramaz ... ancak 'readelf -s [binary]' çıktısında "mcount" için selamlama genel fikri doğru, bence


0

Cevaplara daha fazla ekleme:

  1. Enstrümantasyonu kontrol etmek için mcount / gmon için grep:

    $  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. Birinin derlenmesi ve -pgbayraklarla bağlantı kurması gerekir, aksi takdirde gmon.outoluşturulmaz. yığın akışı bağlantısı.

  3. Ben gprof çalıştığım ikili ikili gmon.outderleme / -pgbayrak ile bağlantı rağmen, herhangi bir dosya oluşturma bulundu . Nedeni - Başvurumu öldürüyordum, temiz bir çıkış değildi. gprofyalnızca program normal olarak çıktığında çıktı üretir. yığın akışı bağlantısı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.