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