在 C++ 中,大多数库都以 Debug/Release 版本提供。问题 1. Debug 版本和 Release 版本之间的最大区别是什么(例如,使用一个版本与另一个版本相比有什么优势)。
问题 2. lib 只是函数的实现,如果您使用的是调试/发布版本,函数实现会如何变化?
问题 3. 你能在调试模式下构建你的应用程序并使用 lib 的发布版本吗?
谢谢。
在 C++ 中,大多数库都以 Debug/Release 版本提供。问题 1. Debug 版本和 Release 版本之间的最大区别是什么(例如,使用一个版本与另一个版本相比有什么优势)。
问题 2. lib 只是函数的实现,如果您使用的是调试/发布版本,函数实现会如何变化?
问题 3. 你能在调试模式下构建你的应用程序并使用 lib 的发布版本吗?
谢谢。
#ifdef DEBUG
块中的代码调试版本通常在构建时几乎没有优化——因此,当您在带有源代码的调试器中单步调试它们时,很有可能在源代码行和程序中发生的事情之间存在良好的映射。当您单步执行高度优化的代码时,它不能很好地映射回源代码,并且更难调试。
此外,每当有人使用#ifdef DEBUG
或等效时,发布版本中都不存在该代码(当然)。这可能是额外的错误检查、日志记录、断言等。
正常情况下,debug 和 release 函数的接口应该不会有区别,所以可以正常的将 debug 和 release 链接在一起,不会有太大的麻烦。
但是,在某些情况下(尤其是在 Windows 上)由于某些库中内置的 DLL 加载而变得非常困难。有些人可能会尝试加载 DLL 的调试版本,而有些人可能想要发布。这些不能都加载到同一个进程中。