Go:
デバッガの使用
方法:
Goはdelve
と呼ばれる組み込みのデバッグ機能を提供しています。これはフル機能のデバッグツールで、Goプログラムをステップ実行し、プログラム変数を調査し、式を評価することができます。
始めるには、まずdelve
をインストールする必要があります。以下を実行することでインストールできます:
go get -u github.com/go-delve/delve/cmd/dlv
これで、簡単なGoプログラムをデバッグする準備が整いました。プログラムmain.go
を考えましょう:
package main
import "fmt"
func main() {
message := "Debugging in Go"
fmt.Println(message)
}
このプログラムをデバッグを開始するには、プロジェクトのディレクトリでターミナルを開き、次を実行します:
dlv debug
このコマンドは、デバッグ体験を改善するために最適化を無効にしてプログラムをコンパイルし、それを起動してデバッガをアタッチします。
delve
が実行されると、インタラクティブなデバッガシェルに入ります。いくつかの基本的なコマンドは以下の通りです:
break main.main
はmain
関数にブレークポイントを設定します。continue
はプログラムの実行をブレークポイントがヒットするまで再開します。print message
はmessage
変数の値を出力します。next
はプログラムの実行を次の行へ進めます。quit
はデバッガを終了します。
ブレークポイントに到達して変数を出力した際の出力は、以下のようになります:
Breakpoint 1 at 0x49ecf3 for main.main() ./main.go:6
> main.main() ./main.go:6 (hits goroutine(1):1 total:1) (PC: 0x49ecf3)
1: package main
2:
3: import "fmt"
4:
5: func main() {
6: => message := "Debugging in Go"
7: fmt.Println(message)
8: }
(dlv) print message
"Debugging in Go"
これらのコマンドを使用して、プログラムをステップごとに進めながら状態を確認し、挙動を理解し、問題を特定することができます。
深堀り
Goの実行モデルとランタイムの性質により、GDB(GNU Debugger)などの従来のツールではなくdelve
がGoのデバッガとしての選択肢となっているのはそのためです。GDBは最初からGoランタイムを念頭に置いて設計されていなかったため、delve
がGo開発者にとってより適した選択肢となります。Delve
はGo専用に設計されており、Goルーチン、チャネル、その他のGo固有の構成要素のデバッグ体験をより直感的にすることができます。
さらに、delve
はGoプログラムで働く際、GDBが提供する基本機能に加えて、実行中のプロセスへのアタッチ、条件付きブレークポイント、Goの並行性プリミティブを含むかもしれない複雑な式の評価など、幅広い機能をサポートしています。
delve
が多くのGo開発者にとってのデフォルトのデバッガであるとはいえ、Goツールチェーンには、プロファイリング用の組み込みpprof
ツールや、並行性の可視化用のtrace
ツールなど、より軽量なデバッグサポート形式も含まれています。これらのツールは、プログラムのパフォーマンス問題や並行性バグを診断するためのより速いまたはより高レベルの方法を提供することがあり、デバッグの文脈によっては、補完的またはより好ましい選択肢となることもあります。