使用 Cmake 的 RelWithDebInfo 作为默认构建类型

Using Cmake's RelWithDebInfo as Default Build Type

在开发和分发应用程序时使用 RelWithDebInfo 作为默认构建类型有什么缺点吗?

在发布模式下出现但在调试模式下不会出现问题后,我想到了这个问题。从那时起,我就默认使用 RelWithDebInfo 构建类型。我仍然可以调试代码,而且我没有遇到任何与构建类型相关的问题。

这是防止在调试模式下不发生但在发布模式下发生的错误的好方法吗?

调试优化构建的常见缺点适用。

特别是,调试器有时可能会就变量的值对您撒谎。此外,通常无法检查已优化的变量,这通常会影响函数参数和局部变量。

可以说更糟糕的是,您没有得到 asserts。 RelWithDebInfo 设置 NDEBUG 预处理器标志,它会关闭断言并剥夺您诊断编程错误的强大工具。

当然,使用 RelWithDebInfo 作为默认设置 没有任何问题,但您仍然应该定期测试所有构建类型。如果您还没有这样做,请为您的项目设置一个持续集成系统,自动对所有构建类型运行所有测试。