无法为linux-vdso.so.1加载共享库符号。 同时debugging

不加载VDSO.so是使用gdbglibc> 2.2时遇到的着名错误之一。 我发现计划在gdb 7.5.1中修复,但事实并非如此。 好的,我在这里find了一个解决方法,但我不明白如何应用它。

操作系统:Arch Linux
IDE:QT创作者3.0.82
编译器:GCC 4.8.2
注:我不确定是否违反上述规定

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

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

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

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

要应用它,请使用patch命令,然后构建您自己的GDB。 但是,首先忽略警告就简单了。

对于像我这样的人只是希望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 之后至少会加载一个obj文件以重新启用输出; 如果有更好的gdb内部知识的人可以指出实际的符号加载失败挂钩,我会非常感兴趣,因为现在当程序启动时,如果vdso是加载的最后一个obj文件,则会导致输出被禁用。