Короткий вариант вопроса: Как я могу получить gdb для использования отладочных символов для libc?
Более длинная версия: Я отлаживаю программу с gdb, и я хочу видеть информацию о futex, используемом 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, оценена.