分享
  1. 首页
  2. 文章

go build -ldflags 参数及 gdb 调试

gvgarven · · 28382 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

go build -ldflags 参数及 gdb 调试

有时发布时我们想隐藏所有代码实现相关的信息,使用 go build -ldflags 参数可以实现相关要求。

示例代码

本文使用版本为go 1.6。

package main
import "log"
type MyCat struct {
 name string
 age int
}
func main() {
 cat := MyCat{
 name: "tom",
 age: 10,
 }
 log.SetFlags(log.Llongfile)
 log.Println(cat)
}

使用-ldflags

设置编译参数-ldflags "-w -s"
其中-w为去掉调试信息(无法使用gdb调试),-s为去掉符号表(暂未清楚具体作用)。

go build -ldflags "-w -s" ./hello.go
  1. 运行观察打印,看见文件名、行号等信息依然保留。

    ./hello

    打印输出如下。而且将该可执行文件置于任何目录下执行,都显示相同的输出。
    可见,文件名和行号为编译时将当前的文件名和行号编译进二进制文件中。

    /home/gv/hello.go:17: {tom 10}
  2. 使用LiteIDE查看二进制文件可以搜索到MyCat标识符。

  3. 使用gdb无法调试,可见调试信息已清除

    gdb ./hello
    (gdb) l main.main
    No symbol table is loaded. Use the "file" command.

不使用-ldflags

go build ./hello.go
  1. 运行打印看见文件名、行号。

  2. 使用LiteIDE查看二进制文件可以搜索到MyCat标识符。

    上述都与使用 -ldflags 参数得到的结果相同。

  3. 使用gdb调试可列出源代码,也可打断点单步调试。

    (gdb) l main.main
    5 type MyCat struct {
    6 name string
    7 age int
    8 }
    9
    10 func main() {
    11 cat := MyCat{
    12 name: "tom",
    13 age: 10,
    14 }
  4. 将源文件删除后再使用gdb调试,可打断点单步调试,但无法列出源代码,只能列出行号和文件名。

    gdb ./hello
    (gdb) l main.main
    5 /home/gv/hello.go: No such file or directory.
     in /home/gv/hello.go

    可见,调试如需列出源代码还需在其编译时写进的文件名和行号中查找。


有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:gvgarven

查看原文:go build -ldflags 参数及 gdb 调试

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
28382 次点击 ∙ 1 赞
被以下专栏收入,发现更多相似内容
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏