调试信息包在许多发行版中用于为用户提供一种在必要时安装调试信息的方法,而不会为每个人提供臃肿的二进制文件。构建和链接程序或库时,可以使用调试信息构建它,然后调试器可以使用这些信息将二进制文件中的位置与其源代码中的位置进行映射;但是这些信息占用了很多空间。因此,调试信息通常在打包之前从二进制文件中剥离。近年来,strip并且objcopy得到了增强,因此可以单独提取和存储调试信息——这就是调试信息包的构建方式。然后,所需要的只是某种确保二进制文件及其调试信息对应的方法,这就是构建 ID 的用武之地——它们是由以下公式计算的唯一标识符ld(在那里寻找--build-id)二进制文件的重要部分。“主要构建 ID 文件”是从构建 ID 到相应二进制文件或调试信息文件的符号链接;它们允许实现双向映射,以便可以有效地调试核心转储(在该.gnu_debuglink部分中,在二进制文件本身中有一个从二进制文件到它们的构建 ID 的链接)。您将在Fedora build-id 功能描述中找到所有这些背后原因的详细解释。
/usr/lib/.build-id
包含已安装软件包的主要 build-id 文件。在 Fedora 27 之前,这些与调试文件一起存在于 中/usr/lib/debug
,并且仅在调试 RPM 中提供。在 Fedora 27 中,引入了一项更改以允许并行安装多个调试信息包。该更改的一部分涉及在它们匹配的包中传送主要的 build-id 文件,以确保它们与已安装的二进制文件匹配。调试信息包在许多发行版中用于为用户提供一种在必要时安装调试信息的方法,而不会为每个人提供臃肿的二进制文件。构建和链接程序或库时,可以使用调试信息构建它,然后调试器可以使用这些信息将二进制文件中的位置与其源代码中的位置进行映射;但是这些信息占用了很多空间。因此,调试信息通常在打包之前从二进制文件中剥离。近年来,
strip
并且objcopy
得到了增强,因此可以单独提取和存储调试信息——这就是调试信息包的构建方式。然后,所需要的只是某种确保二进制文件及其调试信息对应的方法,这就是构建 ID 的用武之地——它们是由以下公式计算的唯一标识符ld
(在那里寻找--build-id
)二进制文件的重要部分。“主要构建 ID 文件”是从构建 ID 到相应二进制文件或调试信息文件的符号链接;它们允许实现双向映射,以便可以有效地调试核心转储(在该.gnu_debuglink
部分中,在二进制文件本身中有一个从二进制文件到它们的构建 ID 的链接)。您将在Fedora build-id 功能描述中找到所有这些背后原因的详细解释。