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

Sha*_*tef 13 linux gdb glibc

不加载VDSO.so是使用gdb和glibc> 2.2时遇到的一个着名错误.我发现计划在gdb 7.5.1中修复,但事实并非如此.好吧,我找到了一个工作,在这里在这里,但我不明白它,如何使用它.

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

Emp*_*ian 16

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

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

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

你没有找到"解决方法".您找到了GDB的补丁,它禁用了警告.

要应用它,请使用该patch命令,然后构建自己的GDB.但是,首先忽略警告简单得多.


Dav*_*d X 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
Run Code Online (Sandbox Code Playgroud)

注意事项:

  • 垄断set logging界面; 如果要使用日志记录,则需要更改它以保存以前的日志记录设置.
  • 硬编码"system-supplied DSO"; 新内核或gdb版本可能很脆弱.
  • 它假定在​​vdso 之后至少有一个objfile被加载 reenable输出; 如果有更好的gdb内部知识的人可以指出实际的符号后加载失败挂钩,我会非常感兴趣,因为现在如果vdso是加载的最后一个objfile,它会冒着程序启动时禁用输出的风险.