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