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ı?
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:
İş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.
Cevaplara daha fazla ekleme:
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
Birinin derlenmesi ve -pgbayraklarla bağlantı kurması gerekir, aksi takdirde gmon.outoluşturulmaz. yığın akışı bağlantısı.
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ı