6

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

在“项目选项”中播放时,我发现将“调试信息”设置为“有限调试信息”会将 EXE 大小减小到非常接近 Delphi XE 生成的 EXE 的大小。也许在 Delphi XE7 下,“有限的调试信息”相当于 Delphi XE 的“调试信息”,因为它会产生相同的 EXE 大小?

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

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

4

1 回答 1

14

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

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

现在我假设你的目标是 Windows(你实际上并没有说你是,但我会在这里使用我的通灵能力),在这种情况下,“有限调试信息”和“调试信息”是相同的事物。在 Windows 下,调试格式称为“GIANT”。你能说“讽刺”吗?DWARF 是一种极其冗长的格式,而 Embarcadero(Borland 最初的)自己的 GIANT 格式更为紧凑。大小的增加只能来自添加的运行时功能,并且可能来自更多使用泛型。

于 2015-01-14T04:02:20.053 回答