无法在gdb中打印errno,抱怨缺少共享库,但它存在

时间:2012-12-03 19:43:48

标签: ubuntu gdb shared-libraries libc errno

调试我的应用程序时,如果我在GDB中断并尝试打印errno,即使是在检查errno的函数内部,我也会从GDB中收到以下错误:

(gdb) print errno
Cannot find shared library `/usr/lib/debug/lib/libc-2.11.1.so' in dynamic linker's load module list

我尝试过的事情:

  1. 检查文件是否存在,确实存在并且大约是7.3MB。
  2. 将/ usr / lib / debug / lib /添加到LD_LIBRARY_PATH的前面。没效果。
  3. 设置LD_PRELOAD = / usr / lib / debug / lib / libc-2.11.1.so会导致我的应用在启动时出现段错误。
  4. 如果我在二进制文件上运行ldd,它说它使用'/lib/libc.so.6',而aptitude(我正在运行Ubuntu)告诉我安装了libc6-dbg 。 / LI>
  5. 检查我没有在.gdbinit中设置自定义lib路径,我没有。
  6. 应用程序似乎运行正常,所以我无法想象libc本身就搞砸了。有什么想法吗?

1 个答案:

答案 0 :(得分:9)

文件/usr/lib/debug/lib/libc-2.11.1.so 包含glibc的调试版本。它包含 libc的调试部分,但没有实际的可执行代码。将其放入LD_PRELOADLD_LIBRARY_PATH错误的要做的事情。不要那样做。

您可以阅读有关单独的调试文件here

  

(gdb)print errno
  在动态链接器的加载模块列表中找不到共享库`/usr/lib/debug/lib/libc-2.11.1.so'

这是GDB中的一个小问题。

您应该知道GDB会查找变量errno,但您的应用程序不会使用任何此类变量。相反,errno#define d宏,可扩展为*(__errno_location()),而GDB不知道这一点。

请改为尝试:

(gdb) p __errno_location()
$1 = (int *) 0x7ffff78396a8

(gdb) x/x $1
0x7ffff78396a8: 0x00000000