go build-ldflagsパラメータおよびgdbデバッグ
1954 ワード
go build-ldflagsパラメータおよびgdbデバッグ
パブリッシュ時には、go build-ldflagsパラメータを使用して、すべてのコード実装に関する情報を非表示にしたい場合があります.
サンプルコード
この文書ではgo 1.6のバージョンを使用します.
-ldflagsの使用
コンパイルパラメータ観察印刷を実行し、ファイル名、行番号などの情報が保持されていることを確認します. LiteIDEを使用してバイナリファイルを表示すると、 gdbでデバッグできません.デバッグ情報は クリアされています.
-ldflagsを使用しない実行印刷ファイル名、行番号が表示されます. LiteIDEを使用してバイナリファイルを表示すると、 gdbデバッグを使用して、ソースコードをリストしたり、ポイント単一ステップデバッグを中断したりすることができます. ソースファイルを削除してからgdbデバッグを使用すると、ポイント単一ステップデバッグを中断できますが、ソースコードはリストできません.行番号とファイル名しかリストできません.
転載先:https://www.cnblogs.com/gvgarven/p/go_build-ldflags.html
パブリッシュ時には、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}
MyCat
識別子を検索できます.gdb ./hello
(gdb) l main.main
No symbol table is loaded. Use the "file" command.
-ldflagsを使用しない
go build ./hello.go
MyCat
識別子を検索できます.これらはすべて−ldflagsパラメータを用いて得られた結果と同じである.(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 ./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