4

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

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

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

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

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

4

2 回答 2

0

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

于 2021-10-07T20:35:26.257 回答
0

根据文档,DSO 是:

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

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

于 2021-08-04T15:02:43.140 回答