Open4

Goのバイナリをデバッグ実行したい

fujiwofujiwo

デバッグ対象のバイナリを用意
デバッグする際に、なるべく最適化しないようにオプションを渡して制御する。
ref: https://go.dev/doc/gdb

The code generated by the gc compiler includes inlining of function invocations and registerization of variables. These optimizations can sometimes make debugging with gdb harder. If you find that you need to disable these optimizations, build your program using go build -gcflags=all="-N -l".

go build -gcflags="all=-N -l" -o myprogram main.go
  • all=-N: 最適化を無効化
  • all=-l: インライン展開を無効化

また、-ldflags=-w オプションはつけないこと。
これはバイナリからデバッグ情報を除去するオプションであるため。

Pass the '-w' flag to the linker to omit the debug information (for example, go build -ldflags=-w prog.go).

fujiwofujiwo

delveを実行
デバッガを実行する

dlv exec myprogram

Type 'help' for list of commands.
(dlv)
fujiwofujiwo

📝 packageと実際のコードの場所を紐づけるため、以下のコマンドを実行

config substitute-path "github.com/gohugoio/hugo/" "/home/yours/hugo-src/hugo-0.111.3/"