什么是 'Limited Debug Information'? (完整的“调试信息”生成巨大的 EXE 文件)

What is 'Limited Debug Information'? (Full “Debugging Information" generates huge EXE files)

我最近安装了 Delphi XE7。当我第一次编译一个旧应用程序时,当我看到 EXE 的大小增加了 10MB 时,我惊呆了!

玩 'Project options' 我发现将 'Debug information' 设置为 'Limited Debug Information' 会将 EXE 大小减小到非常接近 Delphi XE 生成的 EXE 的大小。 也许在 Delphi XE7 'Limited Debug Information' 下等同于 Delphi XE 的 'Debug Information' 因为它产生相同的 EXE 大小?

那么,为什么 full 'Debug information' 使 EXE 如此之大(与 XE 相比)?我无法用有限的信息编译 EXE(我猜),因为我想完全访问调试工具(EurekaLog 也需要它)。
Embarcadero 的文档没有说明 'limited' 和完整调试信息之间的区别。

EurekaLog 文档是针对 Delphi 的旧版本,因此它没有明确说明我是否可以使用新选项(仁慈)'Limited debug info' 或完整的调试信息。我将不得不进行实验。

"Limited Debug Information" 是一个仅影响 Android 目标编译器的选项。但是,由于所有编译器共享相同的接口,因此每个目标都会出现此选项。它仅适用于每个单独的对象 (.o) 文件中有多少调试信息。对于 Android(和 iOS),调试信息格式为 DWARF。 DWARF 是一种非常冗长的格式,可以包含关于给定单元 中所有类型的所有类型的非常详细的结构类型信息,用于给定单元的所有单元 "used" 的所有类型.在"Limited Debug Information"下,所有使用的单元的类型信息是生成的。这可能意味着某些字段和局部变量在调试时可能无法检查。

至于调试信息是否包含在最终的可执行文件中,是由linker选项控制的,而不是由编译器选项控制的。 linker 将 link 任何可用的调试信息。如果选择 Android 和 "Debug Information" 构建,则最终图像将包含更多信息并且更大。

现在我假设你的目标是 Windows(你实际上并没有说你是,但我会在这里使用我的精神力量),在这种情况下,"Limited Debug Information" 和 "Debug Information" 是一回事。在 Windows 下调用调试格式,"GIANT"。你能说 "irony" 吗? DWARF 是一种极其冗长的格式,而 Embarcadero(最初是 Borland)自己的 GIANT 格式更为紧凑。大小的增加只能来自添加的 运行 时间功能,并且可能来自更多使用泛型。