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.out
dosyayı?
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.out
dosyayı?
Yanıtlar:
İşlev referanslarını mcount
(veya muhtemelen _mcount
veya 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 -pg
bayraklarla bağlantı kurması gerekir, aksi takdirde gmon.out
oluşturulmaz. yığın akışı bağlantısı.
Ben gprof çalıştığım ikili ikili gmon.out
derleme / -pg
bayrak ile bağlantı rağmen, herhangi bir dosya oluşturma bulundu . Nedeni - Başvurumu öldürüyordum, temiz bir çıkış değildi. gprof
yalnızca program normal olarak çıktığında çıktı üretir. yığın akışı bağlantısı