gdb引用的“系统提供的DSO”是什么?

问题描述 投票:0回答:2

我正在使用

set verbose on
运行 gdb,并且我正在尝试理解我收到的消息之一:

Reading symbols from system-supplied DSO at 0x7ffff7ffb000...(no debugging symbols found)...done.

什么是

system-supplied DSO
?经过一番搜索,我认为
DSO
可能代表“动态共享对象”。但我仍然不明白 gdb 在这里做什么以及如何解决找不到调试符号的问题(或者如果它甚至很重要)。

我正在调试的程序正在使用 llvm-gcc 进行编译,并应用了 LLVM pass。我认为这会影响 gdb 的行为,但我不太确定如何影响。

所以本质上我的问题是 gdb 打印的消息意味着什么,它是否可能导致问题,如果是的话,有什么关于如何帮助 gdb 找到调试符号的建议。

gdb llvm-gcc
2个回答
1
投票

在此上下文中,系统提供的 DSO 表示由 Linux 内核直接提供的共享库,例如 VDSO。 Debuginfo 确实可供他们使用,但与内核而不是用户空间一起打包。如果您的发行版支持,请使用 debuginfod 自动获取它们。


0
投票

根据this文档,DSO 是:

动态共享对象 (DSO) 是一个对象文件,旨在 由多个应用程序同时使用或共享(a.out 文件) 当他们执行时。

我相信系统提供的 DSO 只是操作系统提供的 DLL,并由主可执行文件加载。由于这是一个外部库,因此您没有此类对象的调试符号,除非您单独下载它们。通常,发布二进制文件会删除调试符号,但它们可以具有指向单独文件的链接。典型的 Linux 发行版提供了一个包含此类二进制文件的调试符号的包(例如基于 RedHat 的发行版的 xxx-debuginfo-xxx.rpm)。

© www.soinside.com 2019 - 2024. All rights reserved.