Как использовать отладочную версию libc

Краткая версия вопроса: Как заставить gdb использовать символы отладки для libc?

Более длинная версия: Я отлаживаю программу с помощью gdb и хочу увидеть информацию о фьютексе, используемом libc. Однако в какой-то момент во время отладки я получаю такой вывод:

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
....

Когда я запускаю info sharedlibraryв gdb в точке останова, я вижу:

(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.

И когда я запускаю lddя см.:

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)

Я использую Ubuntu 10.04 и думаю, что версия libc с символами отладки находится в /usr/lib/debug/lib. Я попытался установить переменную LD_LIBRARY_PATHтак, чтобы это было в начале пути, но это, похоже, не имело значения.

Мне не совсем понятно, как программа выбирает, какие разделяемые библиотеки загружать, независимо от того, устанавливается ли это во время выполнения или во время компиляции (я как бы предположил время выполнения, но теперь я не уверен). Поэтому приветствуется информация о том, как заставить gdb использовать отладочную версию libc.

54
задан Gabriel Southern 6 April 2012 в 09:48
поделиться