我正在尝试确定构建带有调试符号的发布二进制文件是否有任何缺点。对于我们的发布版本,我们目前正在编译,-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 中,使用symbol-file target.dbg
编辑:关于实际问题:
缺点是:
执行速度不受影响 - 调试符号只是在单独的部分中添加到二进制文件中,它们可能会影响您的虚拟地址空间大小,但不会影响其他内容。
它会影响大小,因此也会影响缓存和内存。
如果您阅读有关编译器选项的信息,您会看到它说有时展开循环会使代码变慢,因为增加的大小会破坏缓存并导致更多的内存获取。