Saltar al contenido

¿Cómo verificar si el programa se compiló con símbolos de depuración?

Basta ya de indagar en otros sitios porque has llegado al lugar justo, tenemos la respuesta que necesitas sin complicarte.

Solución:

Puedes usar file y objdump en Linux. En particular, puede ver si el archivo dice “despojado” o “no despojado” (debajo de mi Ubuntu 20.04.1 LTSsi un ejecutable se compila con -g o no muestra not stripped con file mando. Pero el que tiene -gespectáculos with debug_info, además de eso), y si objdump --syms genera algo útil (para mí, dice “sin símbolos” para una compilación regular).

Al ejecutar el objdump --syms comando, veo mucho más que “sin símbolos” en la salida (al menos, para objetos del núcleo).

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

Si esto string se encuentra, 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 que 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 kernel que he compilado con 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 puede ver, la primera salida no devuelve nada, mientras que la segunda salida devuelve líneas con debug en eso.

Nota: en mi caso, el file comando me devolvió “no despojado” en ambas cosas caso de depuración y 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: es el file comando confiable en tales casos? Por lo que he experimentado, confío en el objdump --syms ... | grep debug mando.

Sección de Reseñas y Valoraciones

Nos encantaría que puedieras comunicar este enunciado si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *