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

时间:2015-05-21 20:01:00

标签: c++ c++11 build cmake

在开发应用程序和分发应用程序时使用RelWithDebInfo作为默认构建类型是否有任何缺点?

在发布模式中出现问题但在调试模式下没有问题时我想到了这一点。从那以后,我使用RelWithDebInfo构建类型作为默认值。我仍然可以调试代码,但我没有遇到与构建类型相关的任何问题。

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

1 个答案:

答案 0 :(得分:1)

调试优化版本的常见缺点适用。

特别是,调试器可能偶尔会告诉您变量的值是什么。此外,通常无法检查已优化的变量,这些变量通常会影响函数参数和局部变量。

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

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