避免在Golang上使用调试信息。

huangapple go评论93阅读模式
英文:

Avoid debugging information on golang

问题

我认为gc默认包含调试信息。然而,我想避免反编译。

在使用gc编译Go代码时,如何去除调试信息?

注意:
使用gccgo不能解决这个问题。如果我不使用"-g"进行编译,可执行文件会损坏,并且只会输出以下内容:

ELF可执行文件中没有调试信息 errno -1
致命错误:ELF可执行文件中没有调试信息

运行时堆栈:
ELF可执行文件中没有调试信息 errno -1
在恐慌期间发生恐慌

英文:

I think that gc includes debugging information by default. However, I want to avoid decompilation.

How can I remove the debugging information when compiling go code with gc?

Note:
Using gccgo doesn't solve the problem. If I don't compile with '-g' the executable is broken and only outputs:

no debug info in ELF executable errno -1
fatal error: no debug info in ELF executable

runtime stack:
no debug info in ELF executable errno -1
panic during panic"

答案1

得分: 17

我建议使用-ldflags="-s -w",它可以删除符号表和调试信息。

另外,使用Go 1.13时,可以使用-trimpath来减少文件中存储的文件路径长度。

英文:

I recommend usage of -ldflags="-s -w" which removes symbol table and debugging information.

As a bonus with Go 1.13 -trimpath can be used to reduce length of file paths stored in the file

答案2

得分: 12

go链接器有一个标志-w,它禁用了DWARF调试信息的生成。你可以通过以下方式向go工具构建命令提供链接器标志:

go build -ldflags '-w'

在Linux/Unix平台上,另一种方法是使用命令strip对编译后的二进制文件进行处理。这似乎比上述的链接器选项生成的二进制文件更小。

英文:

The go linker has a flag -w which disables DWARF debugging information generation. You can supply linker flags to go tool build commands as follows:

go build -ldflags '-w'

Another approach on Linux/Unix platforms is using command strip against the compiled binary. This seems to produce smaller binaries than the above linker option.

huangapple
  • 本文由 发表于 2015年5月3日 02:19:46
  • 转载请务必保留本文链接:https://go.coder-hub.com/30005878.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定