【发布时间】:2010-12-10 19:31:06
【问题描述】:
为什么在 cpp 中调试模式下的 dll 比发布时大 X10,而在 .Net 中它们几乎相同?
【问题讨论】:
标签: .net c++ dll debugging release
为什么在 cpp 中调试模式下的 dll 比发布时大 X10,而在 .Net 中它们几乎相同?
【问题讨论】:
标签: .net c++ dll debugging release
要调试 C++ 程序,必须将大量额外信息保存在 DLL 中,以便调试器可以在运行时找到有关代码的信息。与 C# 不同,C++ 没有运行时检查代码的要求,C# 允许广泛的运行时检查,也称为反射。无论是使用调试模式还是发布模式,C# 中都有此信息。
此外,C++ 通常在发布模式下直接编译为机器代码,编译器的目标是尽可能优化代码,例如。删除所有无关的信息和代码。在 C# 中,编译器编译为伪代码,该伪代码根据需要及时编译。无论您正在构建的是发布版还是调试版,此代码都保留了调试所需的大部分内容。如此之多,以至于可以编写反编译器从运行时程序集中返回代码。
【讨论】:
可能是因为在 .Net 中,它是运行时引擎处理所有调试检查,而在 CPP 中,所有检查都编译到 DLL 中。
【讨论】:
.Net DLL 包含支持运行时反射、类型安全和代码访问安全的元数据。 PDB 中唯一的内容是局部变量名称和行号。
在 C++ 中,需要注入额外的元数据,有时需要注入无操作以支持调试。
【讨论】:
您的意思是 C# 而不是 .NET。这也取决于您的项目。
我有一个 C++/CLI DLL,发布时为 54K,调试时为 94K,
另一个是 88KB 的 release 和 124KB 的 debug。
我的包含 MFC 的 C++/CLI EXE 在发布时为 471KB,在调试时为 4446KB!
然后我的 C# DLL 在调试和发布时都是 135KB。
【讨论】: