c++ - 在发布版本中保留调试符号有缺点吗?

我正在尝试确定构建带有调试符号的发布二进制文件是否有任何缺点。对于我们的发布版本,我们目前使用 -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

编辑:关于实际问题:

缺点是:

  • 更轻松的逆向工程(如果您担心的话)
  • 更大的二进制文件

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

https://stackoverflow.com/questions/5569644/

相关文章:

groovy - 如何生成源文件并用gradle编译

visual-studio-2010 - 如何阻止 Visual Studio 构建未更改的依赖项?

command-line - 如何自动化 Visual FoxPro 项目的构建?

ant - 如何在命令行上从属性文件加载 Ant 属性?

java - 如何在构建之前删除 Hudson 工作区?

visual-studio-2010 - 仅在发布构建期间签署具有强名称的程序集

c++ - 在构建库之前让 CMake 执行项目中的目标

android - 错误 : could not load android-info. txt

php - 使用 ant 脚本构建 PHP

build - Mono 3.0.0 基于 CentOS 6 构建