首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
V2EX  ›  问与答

golang 的编译没有 debug release 之分吗?

  •  
  •   51300520 · 169 天前 · 2120 次点击
    这是一个创建于 169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写了这么久的 go,突然想到这个问题,它为啥不像 c++这种有 debug 和 release? 它那个默认编译是直接 release 版本?

    12 回复  |  直到 2019-05-09 10:43:10 +08:00
        1
    coderluan   169 天前
    debug 和 release 其实只是编译器预设的常用编译选项组合,和语言本身没关系的。
    c++用 gcc 也是没 debug 和 release 的,但是有-d,-o2 之类的选项,你可以自己组合出 debug 和 release 一样的效果。
    所以 go 也是一回事,具体看你用什么编译器,即使编译器没有 debug 和 release,你也是可以自己改编译选项的。
        2
    yanaraika   169 天前 via Android
    默认是 RelWithDebugInfo
        3
    Cu635   169 天前
    @coderluan
    ……
    对于 c/c++来说,debug 出来的二进制文件是内嵌源代码的,编译选项就是 gcc -g,直接用 hexdump -C 就能看到。当然还有其它调试用的信息,包括内嵌源代码这些调试信息这个才是根本差别,也是要用编译器的编译选项开关来控制的
        4
    vindurriel   169 天前 via iPhone
    有的 去掉 debug 信息能瘦身 15% 参见 go build 说明文档
        5
    mason961125   169 天前
    strip 了解一下?
        6
    gamexg   169 天前 via Android
    默认带符号链接,对外发布可以去掉。
    另外默认未开启内存竟态检查,调试版本可以开启。
        7
    flynaj   169 天前 via Android
    默认参数是 debug 版,加编译参数-ldflags "-w -s"才是 release. -w 为去掉调试信息,-s 为去掉符号表,文件大小会减小。
        8
    coderluan   169 天前
    @Cu635

    根本差别应该是两个,一个是你说的调试信息,另一个是代码优化,-o1 -o2 这些,这些开关直接影响程序生成的性能的,也就是 release 比 debug 快的原因,非常重要。
        9
    sujin190   169 天前
    @coderluan #8 go 的文档没有特别强调,那估计是生成的代码是一样的,没有特别优化,而且编译号运行和 go run 直接运行似乎看不出性能差距,感觉应该是一样的
        10
    coderluan   169 天前
    @sujin190 go 确实没有,8 楼是回复 3 楼“对于 c/c++来说”的内容。
        11
    Cu635   168 天前
    @coderluan
    代码优化不是根本差别,那是锦上添花。很重要没错。调试信息才是根本。
        12
    coderluan   167 天前
    @Cu635 这个我完全不认同,C/C++主要应用领域就是性能相关的领域,release (-ox )的性能比 debug 的性能提升非常非常明显,所有的官方发布的版本一定会带-ox,所以他叫 release,而不是 nodebug.
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2821 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 12:48 · PVG 20:48 · LAX 05:48 · JFK 08:48
    ♥ Do have faith in what you're doing.