tag mp3tag kid3 editar easytag linux gdb libc ldd

linux - mp3tag - Cómo usar la versión de depuración de libc



mp3 tag linux (2)

Creo que la versión de libc con símbolos de depuración está en / usr / lib / debug / lib. Intenté configurar mi variable LD_LIBRARY_PATH para tener esto al frente de la ruta, pero eso no pareció hacer una diferencia.

Estos no son los droides que buscas.

Las bibliotecas en / usr / lib / debug no son bibliotecas reales . Más bien, contienen solo información de depuración, pero no contienen secciones .text ni .data de libc.so.6 real. Puede leer sobre los archivos de debuginfo separados here .

Los archivos en /usr/lib/debug provienen del paquete libc6-dbg , y GDB los cargará automáticamente , siempre y cuando coincidan con su versión de libc6 instalada. Si su libc6 y libc6-dbg no coinciden, debería recibir una advertencia de GDB.

Puede observar los archivos que GDB está intentando leer configurando set verbose on . Esto es lo que debería ver cuando coinciden libc6 y libc6-dbg :

(gdb) set verbose on (gdb) run thread_db_load_search returning 0 Reading symbols from /lib64/ld-linux-x86-64.so.2...Reading symbols from /usr/lib/debug/lib/ld-2.11.1.so...done. thread_db_load_search returning 0 done. thread_db_load_search returning 0 Loaded symbols for /lib64/ld-linux-x86-64.so.2 Reading symbols from system-supplied DSO at 0x7ffff7ffb000...done. WARNING: no debugging symbols found in system-supplied DSO at 0x7ffff7ffb000. thread_db_load_search returning 0 Reading in symbols for dl-debug.c...done. Reading in symbols for rtld.c...done. Reading symbols from /lib/librt.so.1...Reading symbols from /usr/lib/debug/lib/librt-2.11.1.so...done. thread_db_load_search returning 0 ... etc ...

Actualizar:

Por ejemplo veo
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done

Eso implica que su GDB no está buscando /usr/lib/debug . Una forma en que podría suceder es si configura el debug-file-directory en su .gdbinit incorrectamente.

Aquí está la configuración por defecto:

(gdb) show debug-file-directory The directory where separate debug symbols are searched for is "/usr/lib/debug".

Versión corta de la pregunta: ¿Cómo puedo hacer que gdb use los símbolos de depuración para libc?

Versión más larga: estoy depurando un programa con gdb y quiero ver información sobre un futex utilizado por libc. Sin embargo, en algún momento durante la depuración obtengo resultados como:

Catchpoint 2 (call to syscall futex), 0x00007ffff772b73e in ?? () from /lib/libc.so.6 (gdb) bt #0 0x00007ffff772b73e in ?? () from /lib/libc.so.6 #1 0x00007ffff767fb90 in ?? () from /lib/libc.so.6 #2 0x00007ffff767a4c0 in vfprintf () from /lib/libc.so.6 #3 0x00007ffff768565a in printf () from /lib/libc.so.6 ....

Cuando ejecuto la info sharedlibrary en gdb en el punto de interrupción, veo:

(gdb) info sharedlibrary From To Syms Read Shared Object Library 0x00007ffff7dddaf0 0x00007ffff7df6704 Yes (*) /lib64/ld-linux-x86-64.so.2 0x00007ffff7bc53e0 0x00007ffff7bd1388 Yes (*) /lib/libpthread.so.0 0x00007ffff79ba190 0x00007ffff79bd7d8 Yes (*) /lib/librt.so.1 0x00007ffff76538c0 0x00007ffff7766c60 Yes (*) /lib/libc.so.6 0x00007ffff6c1fd80 0x00007ffff6c303c8 Yes (*) /lib/libgcc_s.so.1 (*): Shared library is missing debugging information.

Y cuando corro ldd veo:

linux-vdso.so.1 => (0x00007ffff7fde000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007ffff7dbf000) librt.so.1 => /lib/librt.so.1 (0x00007ffff7bb6000) libc.so.6 => /lib/libc.so.6 (0x00007ffff7833000) /lib64/ld-linux-x86-64.so.2 (0x00007ffff7fdf000)

Estoy usando Ubuntu 10.04 y creo que la versión de libc con símbolos de depuración está en /usr/lib/debug/lib . Intenté configurar mi variable LD_LIBRARY_PATH para tener esto al frente de la ruta, pero eso no pareció hacer una diferencia.

No estoy completamente claro cómo el programa elige qué bibliotecas compartidas cargar, ya sea que se establezca en tiempo de ejecución o de compilación (en cierto modo asumí el tiempo de ejecución pero ahora no estoy seguro). Por lo tanto, se agradece la información sobre cómo hacer que gdb use la versión de depuración de libc.


Asegúrese de haber instalado los símbolos de depuración para libc:

sudo apt-get install libc6-dbg

Y si estás en un sistema x64 depurando el código x86:

sudo apt-get install libc6:i386 sudo apt-get install libc6-dbg:i386