【发布时间】:2012-04-17 12:35:16
【问题描述】:
简短的问题:
如何让 gdb 使用 libc 的调试符号?
加长版:
我正在用 gdb 调试一个程序,我想查看libc 使用的 futex 的信息。但是,在调试过程中的某些时候,我会得到如下输出:
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
....
当我在 gdb 中的断点处运行 info sharedlibrary 时,我看到:
(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 的调试版本的信息。
【问题讨论】:
标签: linux gdb libc debug-symbols ldd