【问题标题】:debug vs. release dll size调试与发布 dll 大小
【发布时间】:2010-12-10 19:31:06
【问题描述】:

为什么在 cpp 中调试模式下的 dll 比发布时大 X10,而在 .Net 中它们几乎相同?

【问题讨论】:

    标签: .net c++ dll debugging release


    【解决方案1】:

    要调试 C++ 程序,必须将大量额外信息保存在 DLL 中,以便调试器可以在运行时找到有关代码的信息。与 C# 不同,C++ 没有运行时检查代码的要求,C# 允许广泛的运行时检查,也称为反射。无论是使用调试模式还是发布模式,C# 中都有此信息。

    此外,C++ 通常在发布模式下直接编译为机器代码,编译器的目标是尽可能优化代码,例如。删除所有无关的信息和代码。在 C# 中,编译器编译为伪代码,该伪代码根据需要及时编译。无论您正在构建的是发布版还是调试版,此代码都保留了调试所需的大部分内容。如此之多,以至于可以编写反编译器从运行时程序集中返回代码。

    【讨论】:

      【解决方案2】:

      可能是因为在 .Net 中,它是运行时引擎处理所有调试检查,而在 CPP 中,所有检查都编译到 DLL 中。

      【讨论】:

        【解决方案3】:

        .Net DLL 包含支持运行时反射、类型安全和代码访问安全的元数据。 PDB 中唯一的内容是局部变量名称和行号。

        在 C++ 中,需要注入额外的元数据,有时需要注入无操作以支持调试。

        【讨论】:

          【解决方案4】:

          您的意思是 C# 而不是 .NET。这也取决于您的项目。

          我有一个 C++/CLI DLL,发布时为 54K,调试时为 94K,
          另一个是 88KB 的 release 和 124KB 的 debug。

          我的包含 MFC 的 C++/CLI EXE 在发布时为 471KB,在调试时为 4446KB!

          然后我的 C# DLL 在调试和发布时都是 135KB。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-02-04
            • 1970-01-01
            • 1970-01-01
            • 2021-04-29
            • 2013-03-25
            • 2011-03-26
            • 1970-01-01
            • 2018-02-04
            相关资源
            最近更新 更多