zoukankan      html  css  js  c++  java
  • golang 编译 添加debug gdb

    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.
  • 相关阅读:
    HDU 2023题解分析
    Java中常见的几种类型转换
    Software Version --hdu1976
    单词数
    Usaco 2.3 Zero Sums(回溯DFS)--暴搜
    9的余数
    mongodb学习(一)
    svg学习(九)path
    svg学习(八)polyline
    qunit学习(一)
  • 原文地址:https://www.cnblogs.com/dream397/p/14986351.html
Copyright © 2011-2022 走看看