5

在 C++ 中,大多数库都以 Debug/Release 版本提供。问题 1. Debug 版本和 Release 版本之间的最大区别是什么(例如,使用一个版本与另一个版本相比有什么优势)。

问题 2. lib 只是函数的实现,如果您使用的是调试/发布版本,函数实现会如何变化?

问题 3. 你能在调试模式下构建你的应用程序并使用 lib 的发布版本吗?

谢谢。

4

2 回答 2

3

答案 1

调试模式

  • 包含用于调试的符号。换句话说,您的调试器可以链接程序的当前位置它在源代码中的位置
  • 可能包含仅调试代码,例如#ifdef DEBUG块中的代码

发布模式

  • 更快,因为它删除了与调试相关的代码。
  • 调试受限,因为它缺少符号。

答案 2

  • 取决于库的实现方式

答案 3

  • 仅当它们具有相同的ABI时。
于 2010-12-26T00:53:22.117 回答
1

调试版本通常在构建时几乎没有优化——因此,当您在带有源代码的调试器中单步调试它们时,很有可能在源代码行和程序中发生的事情之间存在良好的映射。当您单步执行高度优化的代码时,它不能很好地映射回源代码,并且更难调试。

此外,每当有人使用#ifdef DEBUG或等效时,发布版本中都不存在该代码(当然)。这可能是额外的错误检查、日志记录、断言等。

正常情况下,debug 和 release 函数的接口应该不会有区别,所以可以正常的将 debug 和 release 链接在一起,不会有太大的麻烦。

但是,在某些情况下(尤其是在 Windows 上)由于某些库中内置的 DLL 加载而变得非常困难。有些人可能会尝试加载 DLL 的调试版本,而有些人可能想要发布。这些不能都加载到同一个进程中。

于 2010-12-26T00:53:59.313 回答