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

C++ 在发布版本中保留调试符号是否有缺点?,c++,build,g++,debug-symbols,C++,Build,G++,Debug Symbols,我正试图确定在构建发行版二进制文件时是否会留下调试符号。对于我们的发布版本,我们目前使用-O3进行编译,如果出现任何崩溃,核心几乎是无用的 因此,我想做的是修改构建以保留调试符号,即,-O3-g,但对此存在阻力,因为感觉可能会有一些影响(除了二进制大小)。我知道大小问题可以通过去掉符号来解决,但是还有什么我遗漏的细微之处吗?它会影响大小,从而也会影响缓存和内存 如果您阅读了有关编译器选项的信息,您会发现它说,例如,有时展开循环会使代码速度变慢,因为增加了中断缓存的大小并导致更多的内存提取。将符号

我正试图确定在构建发行版二进制文件时是否会留下调试符号。对于我们的发布版本,我们目前使用
-O3
进行编译,如果出现任何崩溃,核心几乎是无用的


因此,我想做的是修改构建以保留调试符号,即,
-O3-g
,但对此存在阻力,因为感觉可能会有一些影响(除了二进制大小)。我知道大小问题可以通过去掉符号来解决,但是还有什么我遗漏的细微之处吗?

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


如果您阅读了有关编译器选项的信息,您会发现它说,例如,有时展开循环会使代码速度变慢,因为增加了中断缓存的大小并导致更多的内存提取。

将符号与二进制分开

g++ -ggdb -o target obj1.o obj2.o ...
strip target --only-keep-debug -o target.dbg
strip target
然后在gdb中,使用
符号文件target.dbg

编辑:关于实际问题:

缺点是:

  • 更容易的逆向工程(如果你担心的话)
  • 较大的二进制文件

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

这是商业应用程序吗?你担心逆向工程吗?@EboMike,不,这在我们的设置中不是一个适用的问题。哇,太好了,我不知道这是可能的!谢谢,我知道这是可能的,问题更多的是,首先(即剥离步骤之前)使用它们构建优化的构建是否有任何问题。那么,作为第二阶段操作剥离符号是否会减少缓存效果?您指的是Erik的想法?我想是的。