¿Detecta si un binario ELF fue construido con instrumentación gprof?


11

¿Es posible verificar si el programa dado fue compilado con la instrumentación GNU gprof, es decir, con el indicador '-pg' pasado tanto al compilador como al enlazador, sin ejecutarlo para verificar si generaría un gmon.outarchivo?

Respuestas:


10

Puede verificar las referencias a la función mcount(o posiblemente _mcounto de __mcountacuerdo con la Implementación de perfiles ). Esta función es necesaria para que los perfiles funcionen, y debe estar ausente para los binarios sin perfil.

Algo como:

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

Lo anterior funciona en una prueba rápida aquí.


2

La expresión regular en la respuesta anterior no siempre funciona ... pero la idea general de grepping para "mcount" en la salida de 'readelf -s [binary]' es correcta, creo


0

Agregando más a las respuestas:

  1. Para verificar la instrumentación, grep para 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. Es necesario compilar y vincular con -pgbanderas, de lo contrario gmon.outno se generará. enlace stackoverflow.

  3. Descubrí que el binario en el que ejecutaba gprof no generaba ningún gmon.outarchivo, a pesar de compilar / vincular con -pgflag. La razón es que estaba matando mi aplicación, no era una salida limpia. gprofgenera salida solo cuando el programa sale normalmente. enlace stackoverflow

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.