我认为,我的理解发布和调试的区别构建模式。 在于在调试模式下,生成的可执行没有被优化(因为这可能使调试硬)的主要区别和调试符号都包括在内。
在构建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?
我失去了一些东西,或者它没有意义编译所有发行代码RelWithDebInfo?
这取决于你多少与调试信息相信你的客户。
附加信息:
GCC编码调试信息到对象代码。
这里是PDB等效GCC:
如何生成构建目标以外的gcc调试符号?
请注意,cmake的似乎不支持这种做法的开箱。
就我而言,航运代码给客户,而不必存储在内部相应的调试符号是脱发配方,当涉及到调试生产问题。
调试发布版本与调试符号是很少从调试调试任何不同的版本,所以我建议你总是这样做。
这就是说,我不知道是否有任何缺点。 这将会是有趣的,如果这么听到。
一旦你已经尝试调试优化的发布版本,你知道这是为什么,你只希望做时,有没有其他出路的东西。
基本上,我看到两个情况下,当你需要这样的:
- 您有没有出现在调试版本中的一个问题,所以你要调试发布版本
- 你必须在客户崩溃,并使用本地存储的调试信息来了解崩溃。
我不知道你怎么想的,但我在过去十年中不得不调试发布代码两次或三次,并设法在公司工作,其中在客户的崩溃没有问题。
是的,这可能是一个好主意,有调试信息的发布版本,也不过VS没有设置的东西,这种方式和两种情况中的每个十年里,你需要这实在是不值得每次手动设置此功能时间。 由于CMake的给它自由,做到这一点。
即使调试信息产生的发布版本,它是用于调试目的不是调试版本几乎没什么用处。 其原因是,许多变量和中间表达式优化掉,并且因此在调试器不可用。