无法加载linux-vdso.so.1的共享库符号。在调试时

时间:2014-04-02 20:33:39

标签: linux gdb glibc

未加载VDSO.so是使用gdb和glibc> 2.2时遇到的一个着名错误。 我发现计划在gdb 7.5.1中修复,但它不是。 好的,我在这里找到了一个解决方法Here,但我并不了解它,以便如何应用它。

OS:Arch Linux
IDE:QT创建者3.0.82
编译:GCC 4.8.2
注意:我不确定我是否违反了规则,包括上面的链接

2 个答案:

答案 0 :(得分:16)

  

未加载VDSO.so是使用gdb和glibc> 2.2时遇到的一个着名错误。

不,它不是。这里的问题只是一个无用的警告,你可以放心地忽略它。

  

我在这里找到了一个解决方法,但我不明白它如何应用它。

您没有找到“解决方法”。您找到了GDB的补丁,它禁用了警告。

要应用它,请使用patch命令,然后构建自己的GDB。但是,首先忽略警告只是很多

答案 1 :(得分:6)

对于那些(像我一样)只想让gdb关闭缺失符号的人,请尝试将其添加到~/.gdbinit(但请参阅下面的警告):

set logging redirect on
set logging file /dev/null
python
def on_new_objfile(e):
    gdb.execute("set logging off")
    #print "new objfile:",e.new_objfile.filename
    if e.new_objfile.filename[:19] == "system-supplied DSO":
        gdb.execute("set logging on") # hide inevitable error message
gdb.events.new_objfile.connect(on_new_objfile)
end

注意事项:

  • 独占set logging界面;如果您想使用日志记录,则需要对其进行更改以保存以前的日志记录设置。
  • 硬编码"system-supplied DSO";新内核或gdb版本可能很脆弱。
  • 假设在 vdso之后将至少一个objfile加载到reenable输出;如果任何具有更好的gdb内部知识的人都可以指出实际的符号后加载失败挂钩,我会非常感兴趣,因为现在如果vdso是最后加载的obj文件,它会在程序启动时禁止输出被禁用