调试我的应用程序时,如果我在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
我尝试过的事情:
应用程序似乎运行正常,所以我无法想象libc本身就搞砸了。有什么想法吗?
答案 0 :(得分:9)
文件/usr/lib/debug/lib/libc-2.11.1.so
不包含glibc的调试版本。它包含仅 libc的调试部分,但没有实际的可执行代码。将其放入LD_PRELOAD
或LD_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