我想将地图文件添加为资源,然后在每次执行系统时提取该文件,以确保地图文件始终正确,并使支持的生活更轻松。在Delphi 7中,我可以使用地图文件作为资源来编译该项目,但是地图是错误的,因为当引发异常时,调用堆栈是错误的。在 Delphi Seattle 中,我什至无法编译,因为它尝试在生成地图之前添加资源。我知道我可以在编译后任务中添加文件,但是有什么方法可以在编译/构建时执行此操作吗?
抱歉,如果我不是很具体,这是我的第一个问题。谢谢。
更新
在阅读了一些答案后,我做了一些研究。我已经在我的项目中使用了 JEDI 异常单元,但我不认识 JEDI 调试专家。它完全符合我的要求,甚至更多。 JEDI Debug Expert将.map文件转换为.jdbg文件,这是map的加密文件(map只是一个文本文件)。此外,jdbg 文件比地图小约 12%。它还具有“将 jdbg 插入二进制文件 (exe)”的选项。为此,我启用了以下选项:
中构建可用的项目。 build后会在jcl的bin目录下生成exe文件。使用方法: MakeJclDbg -J -E -M 地图文件名
J - 创建 .JDBG 文件
E - 将调试数据插入可执行文件
M - 转换后删除 MAP 文件
可执行文件必须与 MAP 文件位于同一目录中。这将创建 jdbg 文件(基于地图文件),插入到 exe 中并删除地图。有了这个(以及 JEDI 的异常单元),当引发异常时,我可以使用堆栈跟踪、系统使用的所有 dll 的版本、操作系统信息等,并将所有这些发送到电子邮件。
我意识到 Embarcadero 也有他们的 bpl 的 jdbg 文件,所以我认为他们也使用 JCL 工具。
MAP 文件作为单独的文件生成,以避免
增加可执行文件的大小。尝试将该文件作为资源嵌入回可执行文件中根本达不到目的。 您还没有提到您正在使用什么调试框架。但是还有其他方法可以提供调试信息,我建议您参考您使用的调试框架的文档以了解具体信息。我只会提供一些适用于我尝试过的大多数框架的一般概念。
如果您对增加的 EXE 大小感到满意,并希望在可执行文件中包含调试信息:不要使用映射文件选项。
只需启用链接选项即可