2010-07-19 14 views

Respuesta

50

Puede usar file y objdump en Linux. En particular, puede ver si el archivo dice "pelado" o "sin pelar", y si objdump --syms muestra algo útil (para mí, dice "sin símbolos" para una compilación normal).

+4

Despojado significa que no hay símbolos, ¿verdad? –

+17

el equivalente para OS X es 'otool -Iv'. –

+5

qué buscar en la salida de otool -Iv? –

29

Cuando se ejecuta el comando objdump --syms, veo mucho más que "no hay símbolos" en la salida (por lo menos, para los objetos del núcleo ).

Para comprobar si hay información de depuración dentro del objeto kernel, puede agregar lo siguiente al final del comando objdump: | grep debug.

Si se encuentra esta cadena, usted sabe que el objeto kernel contiene información de depuración. Si no, entonces es un objeto kernel "limpio".

Ejemplo de un módulo del kernel he compilado sin información de depuración:

[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 

Ejemplo de ese mismo módulo del kernel he compilado con la información de depuración:

[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 
00000000 l d .debug_frame 00000000 .debug_frame 
00000000 l d .debug_info 00000000 .debug_info 
00000000 l d .debug_abbrev 00000000 .debug_abbrev 
00000000 l d .debug_loc  00000000 .debug_loc 
00000000 l d .debug_aranges 00000000 .debug_aranges 
00000000 l d .debug_ranges 00000000 .debug_ranges 
00000000 l d .debug_line 00000000 .debug_line 
00000000 l d .debug_str  00000000 .debug_str 
00000010 l  .debug_frame 00000000 $d 

Como se puede ver, la primera salida no devuelve nada, mientras que la segunda salida devuelve líneas con debug.

Nota: en mi caso, el comando file me devolvió "no eliminado" en tanto en caso de depuración como de no depuración. Sin embargo, la diferencia de tamaño del objeto kernel fue notable:

  • aprox. 16k sin información de depuración
  • aprox. 137k con información de depuración

Claramente, la última versión tenía información de depuración dentro.

Mi pregunta: ¿el comando file es confiable en tales casos? Por lo que he experimentado, confío en el comando objdump --syms ... | grep debug.

+0

Yo también tuve el mismo problema con 'archivo'. Para mí, 'objdump --syms' sin el bit' grep' produce muchos resultados incluso en la compilación sin depuración, pero el 'grep' ayuda a invocar los símbolos específicos de depuración solo, así que eso funciona para mí. – patrickvacek

+1

+ uno para despejar la vaguedad en la salida de 'archivo' – ADJ

Cuestiones relacionadas