CMake的构建模式RelWithDebInfo(CMake build mode RelWithD

2019-07-31 13:41发布

我认为,我的理解发布和调试的区别构建模式。 在于在调试模式下,生成的可执行没有被优化(因为这可能使调试硬)的主要区别和调试符号都包括在内。

在构建PCRE,为的WinMerge的外部依赖的一个,我注意到,我从来没有见过一个构建模式:RelWithDebInfo。

调试和RelWithDebInfo之间的差额,这里提到: http://www.cmake.org/pipermail/cmake/2001-October/002479.html 。 exerpt:“RelwithDebInfo颇为相似,释放模式它产生完全优化的代码,而且还建立程序数据库,并插入调试行信息给调试器在猜测一个很好的机会,在代码中,你在任何时候。”

这听起来像一个真正的好主意,但不一定有明显的如何设置。 此链接介绍如何启用这个对VC ++: http://www.cygnus-software.com/papers/release_debugging.html

我失去了一些东西,或者它没有意义编译所有发行代码RelWithDebInfo?

Answer 1:

我失去了一些东西,或者它没有意义编译所有发行代码RelWithDebInfo?

这取决于你多少与调试信息相信你的客户。

附加信息:

GCC编码调试信息到对象代码。

这里是PDB等效GCC:

如何生成构建目标以外的gcc调试符号?

请注意,cmake的似乎不支持这种做法的开箱。



Answer 2:

就我而言,航运代码给客户,而不必存储在内部相应的调试符号是脱发配方,当涉及到调试生产问题。

调试发布版本与调试符号是很少从调试调试任何不同的版本,所以我建议你总是这样做。

这就是说,我不知道是否有任何缺点。 这将会是有趣的,如果这么听到。



Answer 3:

一旦你已经尝试调试优化的发布版本,你知道这是为什么,你只希望做时,有没有其他出路的东西。

基本上,我看到两个情况下,当你需要这样的:

  • 您有没有出现在调试版本中的一个问题,所以你要调试发布版本
  • 你必须在客户崩溃,并使用本地存储的调试信息来了解崩溃。

我不知道你怎么想的,但我在过去十年中不得不调试发布代码两次或三次,并设法在公司工作,其中在客户的崩溃没有问题。

是的,这可能是一个好主意,有调试信息的发布版本,也不过VS没有设置的东西,这种方式和两种情况中的每个十年里,你需要这实在是不值得每次手动设置此功能时间。 由于CMake的给它自由,做到这一点。



Answer 4:

生产代码并不需要的尺寸膨胀调试信息携带。



Answer 5:

即使调试信息产生的发布版本,它是用于调试目的不是调试版本几乎没什么用处。 其原因是,许多变量和中间表达式优化掉,并且因此在调试器不可用。



文章来源: CMake build mode RelWithDebInfo