Go 言語は、より便利で迅速な開発のために公開された高級プログラミング言語です。Windows、MacOS、Linux などの複数のオペレーティング システム上で実行できるだけでなく、強力なデバッグ ツールも提供します。開発者が問題を解決するのに役立ちます。この記事では、Linux システム上で Go 言語プログラムをデバッグする方法を紹介します。
デバッグ ツール
Go 言語には組み込みデバッガー (go debug) が用意されていますが、Go の効率的な機能によりデバッグに多くの課題が生じます。 Dlv (https://github.com/go-delve/delve) は、Go 固有のデバッグ機能をサポートする Go 言語用の最新のデバッガーです。 Dlv は、シングルステップ トレース、変数の表示、変数の変更、ブレークポイントなどの一般的なデバッグ機能を提供します。さらに、GDB は Go 言語のデバッグもサポートしていますが、Go 言語のスケジューラを理解できないため、Go 固有の関数をいくつか使用するだけでよいカーネル開発やプログラムのデバッグに適しています。
Dlv のインストール
Dlv は Go 言語で書かれているため、インストールするにはまず Go 言語自体をインストールする必要があります。 Go 言語インストール パッケージの最新バージョンを公式 Web サイト (https://golang.org/dl/) からダウンロードし、環境変数に設定できます。
Go 言語をインストールした後、まず Dlv が依存するライブラリ (動的にリンクされた Linux ユーティリティ) をインストールする必要があります:
sudo apt-get update sudo apt-get install linux-tools-common linux-tools-generic linux-tools-`uname -r`
次に、次のコマンドを実行して Dlv をインストールします:
go get -u github.com/go-delve/delve/cmd/dlv
上記のコマンドは、Dlv を $GOPATH/bin ディレクトリにインストールします。手動で PATH 変数に追加することも、次のコマンドを使用して PATH に追加することもできます:
echo "export PATH=$PATH:$(go env GOPATH)/bin" >> ~/.bashrc source ~/.bashrc
Compile Debugger
プログラムが存在するディレクトリを入力し、go build を使用してプログラムをコンパイルし、バイナリ ファイルを生成する必要があります。プログラムの名前が debug-demo であると仮定すると、次のコマンドでコンパイルできます:
go build -gcflags "-N -l" -o debug-demo
アセンブル中のソース コードの問題を解決するために、 go env コマンドを使用して CGO_ENABLED の値を取得し、それを 0 に設定して、再度コンパイルすることもできます。
go env go build -gcflags "-N -l" -o debug-demo -tags netgo -ldflags '-w -extldflags "-static"' -v main.go
ブレークの設定クリック
プログラム内でのブレークポイントの設定は、デバッグ中に最も一般的に使用される操作です。コード内の任意の場所にブレークポイントを設定して、プログラムの実行がその位置に到達するまで待機することができます。
Dlv を使用すると、次の 2 つの方法でブレークポイントを設定できます。
Dlv のグラフィカル インターフェイスを使用すると、より直感的になります。プログラムを操作および変更します。次のコマンドを実行すると、グラフィカル インターフェイスが自動的に開きます:
dlv debug ./debug-demo
次のコマンドを実行して、Dlv コマンド ライン モードに入ります:
dlv debug ./debug-demo --headless --listen=:2345 --api-version=2
Enter Dlv その後、break (または b と省略) コマンドを使用してブレークポイントを設定できます:
(b)reak {<location>|<function>|<filename>:<line>|<remote package path>}: 设置断点 (b)reakpoints: 显示当前所有的断点 (d)elete {<breakpoint#>|<breakpoint.id>}: 删除断点#或通过Breakpoint.id删除指定断点 (c)ontinue: 从当前位置继续执行程序,直到下一个断点或程序完结
たとえば、プログラムの 10 行目にブレークポイントを設定できます:
(b)reak main.go:10
プログラムの実行を制御する
プログラムの実行中に、step (または s と省略) および next (または n と省略) コマンドを使用して、プログラムの実行を制御できます。
(s)tep: 单步调试,如果当前位置是函数,则进入该函数内部 (n)ext: 单步调试,如果当前位置是函数,则不进入该函数内部
変数の表示
Dlv も提供されています。変数コマンドを表示するには、print (または p と省略) コマンドを使用して、現在のスコープ内の変数を表示します。
(p)rint <variable>: 显示变量
たとえば、次のコマンドを使用して変数 a と変数 b を表示できます:
(p)rint a (p)rint b
変数の変更
変数の表示に加えて、Dlv は変数の値の変更もサポートしています。 set コマンドを使用して変数の値を変更します:
(s)et <variable> = <value>: 修改变量的值
たとえば、次のコマンドを使用して変数 a Modified の値を 100 に設定できます:
(s)et a = 100
summary
この記事では、Dlv を使用して Linux システム上で Go プログラムをデバッグする方法を紹介します。まず、Go 言語と Dlv デバッガーをインストールし、次に go build を使用してプログラムをコンパイルし、プログラムにブレークポイントを設定し、Dlv のグラフィカル インターフェイスまたはコマンド ラインを使用してプログラムの実行を制御し、変数の値を表示および変更しました。プログラムのデバッグ中に発生した Go の問題を解決します。この記事を通じて、読者が Linux システムで Dlv を使用して Go プログラムをデバッグする基本的なスキルを習得できることを願っています。
以上がGolang Linuxをデバッグする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。