Détecter si un binaire ELF a été construit avec l'instrumentation gprof?


11

Est-il possible de vérifier si un programme donné a été compilé avec l'instrumentation GNU gprof, c'est-à-dire avec le drapeau '-pg' passé à la fois au compilateur et à l'éditeur de liens, sans l' exécuter pour vérifier s'il générerait un gmon.outfichier?

Réponses:


10

Vous pouvez vérifier les références à la fonction mcount(ou éventuellement _mcountou __mcountselon l' implémentation du profilage ). Cette fonction est nécessaire pour que le profilage fonctionne et doit être absente pour les fichiers binaires non profilés.

Quelque chose comme:

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

Ce qui précède fonctionne sur un test rapide ici.


2

L'expression régulière dans la réponse ci-dessus ne fonctionne pas toujours ... mais l'idée générale d'accueillir "mcount" dans la sortie de "readelf -s [binary]" est correcte, je pense


0

Ajout de plus aux réponses:

  1. Pour vérifier l'instrumentation, grep pour 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. Il faut compiler et lier avec des -pgdrapeaux, sinon gmon.outil ne sera pas généré. lien stackoverflow.

  3. J'ai trouvé que le binaire sur lequel j'exécutais gprof ne générait aucun gmon.outfichier, malgré la compilation / liaison avec -pgflag. La raison étant - je tuais ma candidature, ce n'était pas une sortie propre. gprofgénère une sortie uniquement lorsque le programme se termine normalement. lien stackoverflow

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.