gcC语言 O2 比 gcC语言 O2 -g 小,后跟 strip --strip-all



我正在构建想要生成发布版本的代码。但是,我也希望能够在它们崩溃时调试cores

所以我读到可以使用调试符号构建,然后生成运行剥离的二进制文件的副本。然后,您可以获取剥离的二进制文件(已发布/客户二进制文件(生成的核心,然后将其与带有调试符号的二进制文件副本进行 gdb 处理......

所以对我来说,第一步是生成二进制文件,我这样做:

  • gcc -O2 ... -o testbin_release_orig(不带符号的原始发布箱(
  • gcc -O2 -g ... -o testbin_debug(完整调试二进制文件(
  • cp testbin_debug testbin_release
  • strip --strip-all testbin_release(剥离的调试二进制文件(

这将生成三个不同大小的文件:

  • testbin_release_orig: ~1.7兆字节
  • testbin_debug: ~13兆字节
  • testbin_release: ~2.1兆字节

我的问题是,为什么testbin_release的大小与testbin_release_orig不完全相同?我猜条带不能去除 gcc 添加的所有调试符号。但是大约有0.4Mb的"额外东西" - 它由什么组成?

区别在于调试代码。

对于 1.7 MB 的可执行文件,您可能正在使用一两个库。通常他们有这样的东西:

#ifdef _DEBUG
// some debug code
#endif

也是大型项目的常见做法,因此其中一些也可能是您的代码。

strip仅删除符号。调试代码将保留。

最新更新