我想将地图文件添加为资源,然后每次执行系统时提取文件,以确保地图文件始终正确,并使支持的生活更轻松。在 Delphi 7 中,我可以编译项目,将地图文件作为资源,但地图是错误的,因为当引发异常时调用堆栈是错误的。在 Delphi Seattle,我什至无法编译,因为它会在生成地图之前尝试添加资源。我知道我可以在编译后的任务中添加文件,但是有没有办法在编译/构建时做到这一点?抱歉,如果我不是很具体,这是我的第一个问题。谢谢。
更新
在我阅读了一些答案后,我做了一些研究。我已经在我的项目中使用 JEDI 异常单元,但我不知道 JEDI 调试专家。它完全符合我的要求,甚至更多。JEDI 调试专家将 .map 文件转换为 .jdbg 文件,这是一个加密的地图文件(地图只是一个文本文件)。此外,jdbg 文件比地图小约12%。它还具有将 jdbg 插入二进制 (exe)的选项。为此,我启用了以下选项:
项目 -> JCL 调试专家 -> 生成 .jdbg 文件 -> 为此项目启用
项目 -> JCL 调试专家 -> 将 jdbg 数据插入二进制文件 -> 为此项目启用
Project -> JCL Debug Expert -> Delete map files after conversion -> Enabled for this project (如果你想删除文件,当然可以)
要在 IDE 之外使用此工具,例如使用 Jenkins,我必须构建JEDI\jcl\examples\windows\debug\tools\MakeJclDbg.dpr中可用的项目。build 后会在 jcl 的 bin 目录下生成 exe 文件。如何使用:
MakeJclDbg -J -E -M map_filename
J - 创建 .JDBG 文件
E - 将调试数据插入可执行文件
M - 转换后删除 MAP 文件
可执行文件必须与 MAP 文件位于同一目录中。这将创建 jdbg 文件(基于地图文件),插入 exe 并删除地图。有了这个(以及 JEDI 的异常单元),当引发异常时,我可以使用堆栈跟踪、系统使用的所有 dll 的版本、操作系统信息等,并将所有这些发送到电子邮件。
我意识到 Embarcadero 也有他们的 bpl 的 jdbg 文件,所以我认为他们也使用 JCL 工具。