Como usar a versão de depuração da libc
Versão curta da pergunta: Como posso obter o gdb para usar os símbolos de depuração da libc?
Versão mais longa: Estou depurando um programa com o gdb e quero ver informações sobre um futex usado pela libc. No entanto, em algum momento durante a depuração, recebo saídas como:
<code>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 .... </code>
Quando eu corroinfo sharedlibrary
no gdb no ponto de interrupção eu vejo:
<code>(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. </code>
E quando eu corroldd
Entendo:
<code>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) </code>
Estou usando o Ubuntu 10.04 e acho que a versão da libc com símbolos de depuração está em/usr/lib/debug/lib
. Eu tentei definir o meuLD_LIBRARY_PATH
variável para ter isso na frente do caminho, mas isso não parece fazer a diferença.
Eu não estou completamente claro sobre como o programa escolhe quais bibliotecas compartilhadas para carregar, se isso é definido em tempo de execução ou tempo de compilação (eu tipo de tempo de execução assumido, mas agora não tenho certeza). Portanto, informações sobre como obter o gdb para usar a versão de depuração da libc são bem-vindas.