Gab*_*ern 55 linux gdb libc ldd
问题的简短版本: 如何让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
....
Run Code Online (Sandbox Code Playgroud)
当我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.
Run Code Online (Sandbox Code Playgroud)
当我跑步时,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)
Run Code Online (Sandbox Code Playgroud)
我正在使用Ubuntu 10.04,我认为带有调试符号的libc版本在/usr/lib/debug/lib.我尝试将我的LD_LIBRARY_PATH变量设置为在路径的前面,但这似乎没有什么区别.
我不清楚程序如何选择加载哪个共享库,无论是在运行时还是编译时设置(我假设运行时但我现在不确定).因此,有关如何让gdb使用libc的调试版本的信息表示赞赏.
Emp*_*ian 68
我认为带有调试符号的libc版本位于/ usr/lib/debug/lib中.我尝试将我的LD_LIBRARY_PATH变量设置为在路径的前面,但这似乎没有什么区别.
这些不是您正在寻找的机器人.
/ usr/lib/debug中的库不是真正的库.相反,包含只调试信息,但不包含.text也不.data现实的部分libc.so.6.您可以在此处阅读单独的debuginfo文件.
这些文件/usr/lib/debug来自libc6-dbg包,GDB会自动加载它们,只要它们与您安装的libc6版本匹配即可.如果你libc6和libc6-dbg不匹配,你应该从GDB的警告.
您可以通过设置观察GDB尝试读取的文件set verbose on.以下是您应该看到libc6和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 ...
Run Code Online (Sandbox Code Playgroud)
更新:
比如我明白了
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done
这意味着你的GDB没有搜索/usr/lib/debug.可能发生的一种方法是debug-file-directory你.gdbinit错误地设置.
这是默认设置:
(gdb) show debug-file-directory
The directory where separate debug symbols are searched for is "/usr/lib/debug".
Run Code Online (Sandbox Code Playgroud)
mtl*_*nch 17
确保已安装libc的调试符号:
sudo apt-get install libc6-dbg
Run Code Online (Sandbox Code Playgroud)
如果你在x64系统上调试x86代码:
sudo apt-get install libc6:i386
sudo apt-get install libc6-dbg:i386
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44277 次 |
| 最近记录: |