Mendeteksi jika biner ELF dibangun dengan instrumentasi gprof?


11

Apakah mungkin untuk memeriksa apakah program yang diberikan dikompilasi dengan instrumentasi gprof GNU, yaitu dengan bendera '-pg' diteruskan ke kompiler dan tautan, tanpa menjalankannya untuk memeriksa apakah akan menghasilkan gmon.outfile?

Jawaban:


10

Anda dapat memeriksa referensi berfungsi mcount(atau mungkin _mcountatau __mcountsesuai dengan Implementasi Profiling ). Fungsi ini diperlukan untuk membuat profil agar berfungsi, dan harus tidak ada untuk biner yang tidak diprofilkan.

Sesuatu seperti:

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

Di atas berfungsi pada tes cepat di sini.


2

Ekspresi reguler dalam jawaban di atas tidak selalu berfungsi ... tetapi gagasan umum untuk memahami "mcount" dalam output 'readelf -s [binary]' benar, saya pikir


0

Menambahkan lebih banyak ke jawaban:

  1. Untuk memeriksa instrumentasi, ambil 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. Orang perlu mengkompilasi dan juga tautan dengan -pgbendera, jika gmon.outtidak, tidak akan dihasilkan. tautan stackoverflow.

  3. Saya menemukan bahwa biner di mana saya menjalankan gprof tidak menghasilkan gmon.outfile apa pun , meskipun mengkompilasi / menghubungkan dengan -pgflag. Alasannya - saya membunuh aplikasi saya, itu bukan jalan keluar yang bersih. gprofmenghasilkan output hanya ketika program keluar secara normal. tautan stackoverflow

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.