【问题标题】:What's the difference between compiler and linker debug information?编译器和链接器调试信息有什么区别?
【发布时间】:2012-02-16 23:35:57
【问题描述】:

我有点困惑为什么Delphi在链接和编译中有调试信息。

它们有什么区别?

【问题讨论】:

    标签: delphi debugging


    【解决方案1】:

    编译器中的调试选项会将调试信息添加到DCU 文件中。

    链接器中的调试选项会将在DCU 文件中找到的所有调试信息放入 exe/dll。

    如果您使用的是 FastMM4 或 memslueth 之类的东西,您将需要这两个选项来帮助您找到任何故障。

    如果您发布代码,您应该禁用链接器选项以大大减少您的 exe 大小(并保护您的 IPR)。

    如果您只发布 DCU 文件(作为第 3 方控件/库),如果您不提供源代码,则应在发布前关闭编译器设置。

    【讨论】:

    • 但是如果我只在编译器中使用调试选项进行编译,madexcept 如何定位过程名称?
    • 它们是 Delphi 的 DCU,而不是 OBJ。如果您只发布编译后的代码,您可能希望发布两个版本的代码: 编译时带调试和不带调试。调试信息不​​仅对于 FastMM4 和其他 3rd 方调试器是必需的,对于 IDE 本身也是最重要的。
    • @opc0de,看看MAP 文件(也是链接器选项):这是将地址转换为模块和过程名称的最简单方法。
    • 我从未使用过 madexcept,但我希望您需要启用这两个选项,因为我从不禁用编译器选项而只使用链接器选项。感谢 Cosmin 纠正我的 obj/dcu 错误,我需要停止使用太多不同的编译器。
    • madexcept 将地图信息添加到 exe。当您将 madexcept 安装到 IDE 中时,它会在您编译/构建时自动为您执行此操作。使用命令行编译器时,您需要使用实用程序。 IIRC 它被称为 madexceptpath.exe,位于 madexcept 安装文件夹中。
    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 2011-03-04
    • 2011-05-03
    • 2018-01-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    相关资源
    最近更新 更多