Debugging GOコードは、GNUデバッガーであるGDBを使用して効果的に行うことができます。GNUデバッガーは、C、C、およびGOプログラムのデバッグに広く使用されています。 GDBを使用してGoコードをデバッグする方法に関する段階的なガイドを次に示します。
デバッグシンボルでGOプログラムをコンパイルします。
GDBを使用する前に、デバッグ情報を含めてGOプログラムをコンパイルする必要があります。 -gcflags
オプションを使用して、これを有効にします。
<code class="sh">go build -gcflags "all=-N -l" your_program.go</code>
このコマンドは、GOコンパイラがコードを最適化せず、必要なデバッグシンボルを含めることを保証します。
GDBを開始:
プログラムをコンパイルしたら、GDBを開始できます。
<code class="sh">gdb ./your_program</code>
ブレークポイントを設定します:
GDBでは、 break
コマンドを使用してブレークポイントを設定できます。 GOのために、ファイル:行表記が直接機能しないため、多くの場合、関数名を直接指定する必要があります。
<code class="gdb">(gdb) break main.main</code>
これにより、プログラムのエントリポイントにブレークポイントが設定されます。
プログラムを実行します:
run
コマンドを使用して実行を開始します。
<code class="gdb">(gdb) run</code>
プログラムは、ブレークポイントに達するまで実行されます。
変数を検査します:
print
コマンドを使用して変数を検査できます。
<code class="gdb">(gdb) print myVariable</code>
スライスやマップなどのGO固有のタイプの場合、 delve
リポジトリにあるカスタムプリティプリンターを使用する必要がある場合があります。
コードを介してステップ:
next
とstep
コマンドを使用して、行ごとにコードを介して移動します。
<code class="gdb">(gdb) next (gdb) step</code>
継続的な実行:
使用しcontinue
、次のブレークポイントまでプログラムを実行します。
<code class="gdb">(gdb) continue</code>
GDBを使用できるが、GOのために特別に設計されていないことを忘れないでください。これは、GO固有の構造とゴルチンを効果的に検査する際の制限につながる可能性があります。
GOでGDBを使用することでブレークポイントを効果的に設定するには、ツールと言語の両方を理解する必要があります。ここにいくつかのベストプラクティスがあります:
ブレークポイントに関数名を使用します:
Goのランタイムは複雑であり、ファイル:ラインブレークポイントは信頼できない場合があります。代わりに機能名を使用します。
<code class="gdb">(gdb) break main.main (gdb) break yourPackage.YourFunction</code>
-gcflags "all=-l"
フラグを使用して、インラインを無効にすることができます。プログラムを開始する前にブレークポイントを設定します。
プログラムを開始する前にブレークポイントを設定して、できるだけ早くヒットしていることを確認してください。
<code class="gdb">(gdb) break main.main (gdb) run</code>
条件付きブレークポイントを使用します:
不必要な停留所を最小限に抑えるには、条件付きブレークポイントを使用してください。
<code class="gdb">(gdb) break main.main if someCondition == true</code>
Goのランタイム情報をレバレッジ:
info goroutines
を使用して、ゴルチンのリストを取得し、必要に応じてゴルチンのブレークポイントを設定します。
<code class="gdb">(gdb) info goroutines</code>
メモリの変更には、ハードウェアウォッチポイントを使用します。
特定のメモリの場所を監視している場合、ハードウェアウォッチポイントが効果的になります。
<code class="gdb">(gdb) watch *somePointer</code>
はい、GDBに特に設計されているか、Debuggingに適しているGDBにはいくつかの選択肢があります。ここにいくつかの推奨事項があります:
delve:
Delveは、Goに最も人気があり強力なデバッガーです。 Goroutinesに優れたサポートを提供し、そのインターフェイスはGoのランタイムでスムーズに動作するように設計されています。以下を使用してインストールできます。
<code class="sh">go install github.com/go-delve/delve/cmd/dlv@latest</code>
Delveでデバッグを開始するには:
<code class="sh">dlv debug your_program.go</code>
delve
リポジトリからのカスタムプリティプリンターとコマンドを使用してGDBのGOデバッグ機能を強化できることは注目に値します。ゴーでのデバッグセッション中にゴルチンの取り扱いと検査は困難な場合がありますが、同時プログラムを理解するためには重要です。 Delveを使用してそれを行う方法は次のとおりです。これは、GDBよりもこのタスクに適しています。
すべてのゴルチンをリストします:
goroutines
コマンドを使用して、すべての実行中のゴルチンをリストします。
<code class="delve">(dlv) goroutines</code>
これにより、ゴルチンの番号付きリストが表示されます。
ゴルチンを切り替えます:
別のゴルウチンに切り替えるには、 goroutine
コマンドを使用して、検査するゴルウチンの数を使用します。
<code class="delve">(dlv) goroutine 2</code>
このコマンドは、指定されたゴルウチンにコンテキストを変更します。
ゴロウチン状態を検査します。
info goroutines
コマンドを使用して、すべてのゴルチンの現在の状態に関する詳細情報を取得します。
<code class="delve">(dlv) info goroutines</code>
ゴルチンのブレークポイントを設定します:
ゴロウチンが起動される関数呼び出しでそれらを設定することにより、ゴルチン用に特にブレークポイントを設定できます。例えば:
<code class="delve">(dlv) break main.someFunction</code>
次に、ブレークポイントがヒットしたら、ゴルチンを切り替えて状態を検査できます。
スタックトレースを使用します:
Delveのbt
コマンド(BackTrace)を使用して、現在のゴルウチンのスタックを確認できます。
<code class="delve">(dlv) bt</code>
ゴルチンの変数を検査します。
ゴルウチンのコンテキストになったら、メインスレッドのように変数を検査できます。
<code class="delve">(dlv) print myVariable</code>
これらの手法を使用することにより、複数のゴルチンでGOプログラムの動作を効果的にデバッグして理解できます。
以上がGDBまたは他のデバッガーを使用して、GOコードをどのようにデバッグしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。