golang 的编译没有 debug release 之分吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
51300520
V2EX    问与答

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

  •  
  •   51300520 2019-05-07 01:06:54 +08:00 8167 次点击
    这是一个创建于 2439 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    根本差别应该是两个,一个是你说的调试信息,另一个是代码优化,-o1 -o2 这些,这些开关直接影响程序生成的性能的,也就是 release 比 debug 快的原因,非常重要。
    sujin190
        9
    sujin190  
       2019-05-07 14:52:32 +08:00
    @coderluan #8 go 的文档没有特别强调,那估计是生成的代码是一样的,没有特别优化,而且编译号运行和 go run 直接运行似乎看不出性能差距,感觉应该是一样的
    coderluan
        10
    coderluan  
       2019-05-07 15:09:21 +08:00
    @sujin190 go 确实没有,8 楼是回复 3 楼“对于 c/c++来说”的内容。
    Cu635
        11
    Cu635  
       2019-05-08 16:04:22 +08:00
    @coderluan
    代码优化不是根本差别,那是锦上添花。很重要没错。调试信息才是根本。
    coderluan
        12
    coderluan  
       2019-05-09 10:43:10 +08:00
    @Cu635 这个我完全不认同,C/C++主要应用领域就是性能相关的领域,release (-ox )的性能比 debug 的性能提升非常非常明显,所有的官方发布的版本一定会带-ox,所以他叫 release,而不是 nodebug.
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2350 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:47 PVG 23:47 LAX 07:47 JFK 10:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86