是否可以在编译时添加.map文件作为项目的资源?



我想将地图文件添加为资源,然后在每次执行系统时提取该文件,以确保地图文件始终正确,并使支持生活更轻松。在Delphi 7我可以编译项目,与映射文件作为资源,但映射是错误的,因为当一个异常被提出的调用堆栈是错误的。在Delphi Seattle中,我甚至无法编译,因为它试图在生成地图之前添加资源。我知道我可以在编译后的任务中添加文件,但是有什么方法可以在编译/构建时间中做到这一点吗?对不起,如果我不是很具体,这是我的第一个问题。谢谢。

在我读了一些答案后,我做了一些研究。我已经在我的项目中使用了JEDI异常单元,但是我不认识JEDI调试专家。它完全符合我的要求,甚至更多。JEDI Debug专家将。map文件转换为。jdbg文件,该文件是map的加密文件(map只是一个文本文件)。另外,jdbg文件比映射文件小12%。它还具有将jdbg插入二进制文件(exe)的选项。为此,我启用了以下选项:

  • Project -> JCL Debug expert -> Generate .jdbg files -> Enabled for this Project

  • Project -> JCL Debug expert -> Insert jdbg data into binary -> Enabled for this Project

  • Project -> JCL Debug expert ->在转换后删除地图文件->为这个项目启用(当然如果你想删除文件)

为了在IDE之外使用这个工具,例如Jenkins,我必须在JEDIjclexampleswindowsdebugtoolsMakeJclDbg.dpr中构建可用的项目。构建完成后,它将在jcl的bin目录下生成exe文件。如何使用:

MakeJclDbg -J -E -M map_filename

创建.JDBG文件

E -在可执行文件中插入调试数据

M -删除转换后的MAP文件

可执行文件必须与MAP文件位于同一目录。这将创建jdbg文件(基于地图文件),插入到exe中并删除地图。有了这个(以及JEDI的异常单元),当引发异常时,我可以获得堆栈跟踪、系统使用的所有dll的版本、操作系统信息等等,并将所有这些发送到电子邮件中。

我意识到Embarcadero也有他们bpl的jdbg文件,所以我认为他们也使用JCL工具。

不,映射文件是在程序输出链接后生成的。将尚未生成的映射文件作为资源合并到项目中是不可能的。

你没抓住重点。

MAP文件作为单独的文件生成,以避免增加可执行文件的大小。试图将该文件作为资源嵌入到可执行文件中,根本无法达到目的。

你没有提到你正在使用什么调试框架。但是还有其他提供调试信息的方法,我建议您参考您所使用的调试框架的文档来了解细节。我只提供一些适用于我尝试过的大多数框架的一般概念。

  • 如果您对增加EXE大小感到满意,并希望在可执行文件中包含调试信息:不要使用映射文件选项。简单地启用链接选项以包含调试信息。(并确保您的调试框架将使用它。)
  • 大多数调试框架建议在堆栈框架打开的情况下编译。这非常重要,因为它使调试框架更容易推断调用堆栈。
  • 一些调试框架有一个功能,允许猜测丢失的调用堆栈信息。如果启用,您将需要手动忽略任何实际上没有意义的堆栈项。当然,不要忘记,任何没有调试信息的编译单元都不会有调试信息包含在最终的可执行文件中。

相关内容

  • 没有找到相关文章

最新更新