go build-ldflagsパラメータおよびgdbデバッグ

1954 ワード

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
  • 観察印刷を実行し、ファイル名、行番号などの情報が保持されていることを確認します.
    ./hello
    印刷出力は以下の通りです.また、実行可能ファイルを任意のディレクトリの下に配置して実行すると、同じ出力が表示されます.ファイル名と行番号がコンパイルされている場合、現在のファイル名と行番号がバイナリファイルにコンパイルされます.
    /home/gv/hello.go:17: {tom 10}
  • LiteIDEを使用してバイナリファイルを表示すると、MyCat識別子を検索できます.
  • gdbでデバッグできません.デバッグ情報は
    gdb ./hello
    (gdb) l main.main
    No symbol table is loaded.  Use the "file" command.
  • クリアされています.
    -ldflagsを使用しない
    go build ./hello.go
  • 実行印刷ファイル名、行番号が表示されます.
  • LiteIDEを使用してバイナリファイルを表示すると、MyCat識別子を検索できます.これらはすべて−ldflagsパラメータを用いて得られた結果と同じである.
  • 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      }
  • ソースファイルを削除してからgdbデバッグを使用すると、ポイント単一ステップデバッグを中断できますが、ソースコードはリストできません.行番号とファイル名しかリストできません.
    gdb ./hello
    (gdb) l main.main
    5   /home/gv/hello.go: No such file or directory.
        in /home/gv/hello.go
    に表示されます.デバッグは、ソースコードをリストする必要がある場合、コンパイル時に書かれたファイル名と行番号で検索する必要があります.

  • 転載先:https://www.cnblogs.com/gvgarven/p/go_build-ldflags.html