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

时间:2015-01-13 20:52:57

标签: delphi delphi-xe delphi-xe7 eurekalog

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

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

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

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

1 个答案:

答案 0 :(得分:13)

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

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

现在我假设您正在瞄准Windows(你实际上并不是说你是,但我会在这里使用我的心灵能力),在这种情况下,"有限的调试信息"和"调试信息"是一回事。在Windows下,调用调试格式," GIANT"。你能说"反讽"? DWARF是一种非常冗长的格式,而Embarcadero(Borland最初)拥有的GIANT格式更加紧凑。大小的增加只能来自增加的运行时功能,而且可能来自更多使用泛型。