我想有一份报告清楚地解释为什么用Delphi构建的exe具有特定的大小。
例如:
filename: Project1.dpr - total size 100MB
Details:
- unit1.dcu - 20MB
- unit2.dcu - 60MB
- libraries.dcu - 20MB
我希望有这样的报告来理解为什么我刚刚构建的exe是120MB的大小。它使用来自另一个应用程序的许多文件,当构建时为90MB。我只添加了两个单元(并删除了很多),大小从90改为120 MB。我期待更小的尺寸(考虑到许多被移除的单位)。
是否有一些工具已经这样做了,或者有没有办法从IDE学习这个问题?
答案 0 :(得分:6)
我想有一份报告清楚地解释为什么用Delphi构建的exe具有特定的大小。
Ville Krumlinde编写了一个工具,通过解析链接器创建的地图文件来报告exe文件中的单元大小:DelphiUnitSizes。
将Project Options|Linking|Map File
设置为Publics
或Detailed
并完整构建exe。使用DelphiUnitSizes
打开生成的地图文件。
Eric Grange的另一个类似工具是MapFileStats。
我可以在没有debuginfo的情况下使用EurekaLog吗?
“调试信息”(链接器页面,新的Delphi)/“包含TD32调试信息”(旧Delphi)/“完整调试信息”(C ++ Builder) - 此选项将TD32格式的外部调试器的调试信息嵌入到您的应用程序中。如果使用“运行”/“附加到进程”并且Delphi找不到调试信息,则可能需要此选项。此外,EurekaLog使用TD32信息在C ++ Builder中完成缺少的信息。请注意,通过启用此选项(C ++ Builder将信息写入单独的.tds文件),您的Delphi应用程序的大小可以增加5-10倍,除非您启用“将调试信息放在单独的TDS文件中”选项。
并且
“Map file” - 通过启用此选项,您可以告诉Delphi的链接器创建一个单独的.map文件以及您的可执行文件。映射文件包含调试信息的人类可读表示。此选项的不同设置控制输出的detalization级别。通常,不需要将其更改为任何内容,这与“关闭”或“详细”不同。各种工具使用map-file作为调试信息的主要来源。例如,EurekaLog会自动打开此选项并使用map-file以自己的格式创建调试信息,然后将其注入应用程序。这就是您很少需要手动更改此选项的原因。
这意味着映射文件以某种方式注入到exe文件中,而在exe中包含完整的调试信息是可选的。
答案 1 :(得分:0)
如果您不介意阅读一个小十六进制,可以在项目选项 - Delphi编译器 - 链接中将映射文件设置为段。您将获得一个名为 yourexe .map的文本文件,其中包含所包含模块的列表及其各自的长度。
这允许对exe的内容进行基本分析。但是,它不会回答你的下一个问题,“我真的需要所有这些东西吗?”......