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