Ubuntu Can';t在gdb中打印错误,抱怨缺少共享库,但它存在

Ubuntu Can';t在gdb中打印错误,抱怨缺少共享库,但它存在,ubuntu,gdb,shared-libraries,libc,errno,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 我尝试过的事情: 检查文件是否存在,它确实存在并且大约为7.3MB 将/usr/lib/debug/lib/添加到我的LD_LIBRARY_路径

调试应用程序时,如果我中断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
我尝试过的事情:

  • 检查文件是否存在,它确实存在并且大约为7.3MB
  • 将/usr/lib/debug/lib/添加到我的LD_LIBRARY_路径的前面。没有效果
  • 设置LD_PRELOAD=/usr/lib/debug/lib/libc-2.11.1.so会导致我的应用程序在启动时出错
  • 如果我在二进制文件上运行ldd,它会说它使用了“/lib/libc.so.6”,而aptitude(我运行的是Ubuntu)告诉我安装了libc6dbg
  • 检查我没有在.gdbinit中设置自定义库路径,我没有

  • 应用程序在其他方面似乎运行良好,因此我无法想象libc本身会出问题。有什么想法吗?

    文件
    /usr/lib/debug/lib/libc-2.11.1。因此
    不包含glibc的调试版本。它只包含libc的调试部分,但没有实际的可执行代码。将其放入
    LD\u预加载
    LD\u库路径
    是错误的。不要那样做

    您可以阅读关于单独调试文件的内容

    (gdb)打印错误号
    在动态链接器的加载模块列表中找不到共享库“/usr/lib/debug/lib/libc-2.11.1.so”

    这是GDB中的小号

    您应该知道GDB将查找变量
    errno
    ,但您的应用程序不使用任何此类变量。相反,
    errno
    是一个
    #define
    d宏,它扩展到
    *(\uu errno\u location())
    ,GDB对此一无所知

    请尝试以下方法:

    (gdb) p __errno_location()
    $1 = (int *) 0x7ffff78396a8
    
    (gdb) x/x $1
    0x7ffff78396a8: 0x00000000
    

    看起来您的shell启动文件正在破坏LD_LIBRARY_路径。检查这个链接,[.Hope有用。@SunEric:AFAICT,像/usr/lib这样的系统路径总是自动搜索的。另外,我在#2中指出,显式地将路径添加到LD#u LIBRARY#path并不能修复错误。