在发布版本中留下调试符号是否有缺点?

时间:2011-04-06 16:12:35

标签: c++ build g++ debug-symbols

我正在尝试确定是否存在构建具有调试符号的发布二进制文件的缺点。对于我们的发布版本,我们目前使用-O3进行编译,如果有任何崩溃,则核心是旁边没用了。

所以,我想要做的是修改构建以留下调试符号,即-O3 -g,但是有阻力,因为感觉可能有一些影响(除了二进制的大小)。我知道尺寸问题可以通过剥离符号来解决,但还有其他任何我想念的微妙吗?

2 个答案:

答案 0 :(得分:23)

将符号与二进制分开。

g++ -ggdb -o target obj1.o obj2.o ...
strip target --only-keep-debug -o target.dbg
strip target

然后在gdb中,使用symbol-file target.dbg

编辑:关于实际问题:

缺点是:

  • 更容易进行逆向工程(如果这让您担心)
  • 更大的二进制文件

执行速度不受影响 - 调试符号只是在单独的部分中添加到二进制文件中,它们可能会影响您的虚拟地址空间大小,但不会影响其他任何内容。

答案 1 :(得分:0)

它会影响大小,从而影响缓存和内存。

如果您阅读有关编译器选项的信息,您会看到它表示有时展开循环会使代码SLOWER因为增加了大小,导致缓存并导致更多的内存提取。