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

Jos*_*vin 2 ubuntu gdb errno shared-libraries libc

在调试我的应用程序时,如果我在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
Run Code Online (Sandbox Code Playgroud)

我试过的事情:

  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"和资质(我运行Ubuntu)告诉我的libc6-DBG 安装.
  5. 检查我没有在.gdbinit中设置自定义lib路径,我没有.

该应用程序似乎运行正常,所以我无法想象libc本身搞砸了.有任何想法吗?

Emp*_*ian 10

该文件/usr/lib/debug/lib/libc-2.11.1.so没有包含的glibc的调试版本.它包含了只有 libc中的调试部分,但没有实际的可执行代码.付诸LD_PRELOAD或者LD_LIBRARY_PATH错误的事情.不要那样做.

您可以在此处阅读单独的调试文件.

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

这是GDB中的一个小问题.

您应该知道GDB将查找变量errno,但您的应用程序不使用任何此类变量.相反,errno是一个#defined宏,它扩展为*(__errno_location()),而GDB不知道这一点.

试试这个:

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

(gdb) x/x $1
0x7ffff78396a8: 0x00000000
Run Code Online (Sandbox Code Playgroud)