2011-04-06 54 views
11

我试图确定是否有任何缺点来构建发布二进制文件,并留下调试符号。对于我们的发布版本,我们现在编译时使用-O3,如果有任何崩溃,那么核心几乎是无用的。在发布版本中留下调试符号是否有缺点?

所以,我希望做的是修改生成的调试符号离开,即-O3 -g,但这种阻力的感觉是,可能会有一些影响(除了二进制大小) 。我知道尺寸问题可以通过去除符号来解决,但是我还有什么其他细节?

+0

它是一个商业应用程序?你担心逆向工程吗? – EboMike 2011-04-06 16:14:51

+0

@EboMike,不,这不适用于我们的设置。 – Nim 2011-04-06 16:26:08

回答

22

来自二进制的单独符号。

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

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

编辑:实际的问题:

的缺点是:

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

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

+1

哇,很好,我不知道这是可能的! – speeder 2011-04-06 16:17:22

+0

谢谢,我知道这是可能的,问题更多的是有没有建立优化构建与他们在第一位(即剥离步骤之前)的任何问题。 – Nim 2011-04-06 16:27:08

+0

感谢您的更新。我想我必须尝试一下,看看会发生什么。 – Nim 2011-04-06 17:47:03

0

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

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

+0

那么,作为第二阶段操作去除符号是否会降低缓存效果? – Nim 2011-04-06 16:27:54

+0

你在提及Erik的想法?我想是的。 – speeder 2011-04-06 16:30:04

相关问题