ホームページ > バックエンド開発 > Golang > GDBまたは他のデバッガーを使用して、GOコードをどのようにデバッグしますか?

GDBまたは他のデバッガーを使用して、GOコードをどのようにデバッグしますか?

Emily Anne Brown
リリース: 2025-03-21 12:49:38
オリジナル
1016 人が閲覧しました

GDBまたは他のデバッガーを使用して、GOコードをどのようにデバッグしますか?

Debugging GOコードは、GNUデバッガーであるGDBを使用して効果的に行うことができます。GNUデバッガーは、C、C、およびGOプログラムのデバッグに広く使用されています。 GDBを使用してGoコードをデバッグする方法に関する段階的なガイドを次に示します。

  1. デバッグシンボルでGOプログラムをコンパイルします。
    GDBを使用する前に、デバッグ情報を含めてGOプログラムをコンパイルする必要があります。 -gcflagsオプションを使用して、これを有効にします。

     <code class="sh">go build -gcflags "all=-N -l" your_program.go</code>
    ログイン後にコピー

    このコマンドは、GOコンパイラがコードを最適化せず、必要なデバッグシンボルを含めることを保証します。

  2. GDBを開始:
    プログラムをコンパイルしたら、GDBを開始できます。

     <code class="sh">gdb ./your_program</code>
    ログイン後にコピー
  3. ブレークポイントを設定します:
    GDBでは、 breakコマンドを使用してブレークポイントを設定できます。 GOのために、ファイル:行表記が直接機能しないため、多くの場合、関数名を直接指定する必要があります。

     <code class="gdb">(gdb) break main.main</code>
    ログイン後にコピー

    これにより、プログラムのエントリポイントにブレークポイントが設定されます。

  4. プログラムを実行します:
    runコマンドを使用して実行を開始します。

     <code class="gdb">(gdb) run</code>
    ログイン後にコピー

    プログラムは、ブレークポイントに達するまで実行されます。

  5. 変数を検査します:
    printコマンドを使用して変数を検査できます。

     <code class="gdb">(gdb) print myVariable</code>
    ログイン後にコピー

    スライスやマップなどのGO固有のタイプの場合、 delveリポジトリにあるカスタムプリティプリンターを使用する必要がある場合があります。

  6. コードを介してステップ:
    nextstepコマンドを使用して、行ごとにコードを介して移動します。

     <code class="gdb">(gdb) next (gdb) step</code>
    ログイン後にコピー
  7. 継続的な実行:
    使用しcontinue 、次のブレークポイントまでプログラムを実行します。

     <code class="gdb">(gdb) continue</code>
    ログイン後にコピー

GDBを使用できるが、GOのために特別に設計されていないことを忘れないでください。これは、GO固有の構造とゴルチンを効果的に検査する際の制限につながる可能性があります。

GDBを使用してブレークポイントを設定するためのベストプラクティスは何ですか?

GOでGDBを使用することでブレークポイントを効果的に設定するには、ツールと言語の両方を理解する必要があります。ここにいくつかのベストプラクティスがあります:

  1. ブレークポイントに関数名を使用します:
    Goのランタイムは複雑であり、ファイル:ラインブレークポイントは信頼できない場合があります。代わりに機能名を使用します。

     <code class="gdb">(gdb) break main.main (gdb) break yourPackage.YourFunction</code>
    ログイン後にコピー
  2. インラインされた関数でブレークポイントの設定を避けます。
    Goのコンパイラはインライン機能をインラインで行い、そのような関数のブレークポイントを効果的ではありません。コンピレーション中に-gcflags "all=-l"フラグを使用して、インラインを無効にすることができます。
  3. プログラムを開始する前にブレークポイントを設定します。
    プログラムを開始する前にブレークポイントを設定して、できるだけ早くヒットしていることを確認してください。

     <code class="gdb">(gdb) break main.main (gdb) run</code>
    ログイン後にコピー
  4. 条件付きブレークポイントを使用します:
    不必要な停留所を最小限に抑えるには、条件付きブレークポイントを使用してください。

     <code class="gdb">(gdb) break main.main if someCondition == true</code>
    ログイン後にコピー
  5. Goのランタイム情報をレバレッジ:
    info goroutinesを使用して、ゴルチンのリストを取得し、必要に応じてゴルチンのブレークポイントを設定します。

     <code class="gdb">(gdb) info goroutines</code>
    ログイン後にコピー
  6. メモリの変更には、ハードウェアウォッチポイントを使用します。
    特定のメモリの場所を監視している場合、ハードウェアウォッチポイントが効果的になります。

     <code class="gdb">(gdb) watch *somePointer</code>
    ログイン後にコピー

GDB以外にGOに代わるデバッガーをお勧めできますか?

はい、GDBに特に設計されているか、Debuggingに適しているGDBにはいくつかの選択肢があります。ここにいくつかの推奨事項があります:

  1. 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>
    ログイン後にコピー
  2. GO拡張機能を備えたビジュアルスタジオコード:
    VSCODEは、GO拡張機能と組み合わせると、ブレークポイントの設定、コードのステッピング、およびすべてが最新のIDE内で変数の検査をサポートするリッチなデバッグエクスペリエンスを提供します。
  3. ゴーランド:
    Golandは、Goroutineの視覚化、スタックトレース、ブレークポイントを設定し、コードを検査するためのユーザーフレンドリーなインターフェイスなどの機能を備えた包括的なデバッガーを提供しています。
  4. GO拡張機能付きGDB:
    最初の質問で言及しましたが、 delveリポジトリからのカスタムプリティプリンターとコマンドを使用してGDBのGOデバッグ機能を強化できることは注目に値します。

ゴーのデバッグセッション中にゴルチンを処理し、検査する方法は?

ゴーでのデバッグセッション中にゴルチンの取り扱いと検査は困難な場合がありますが、同時プログラムを理解するためには重要です。 Delveを使用してそれを行う方法は次のとおりです。これは、GDBよりもこのタスクに適しています。

  1. すべてのゴルチンをリストします:
    goroutinesコマンドを使用して、すべての実行中のゴルチンをリストします。

     <code class="delve">(dlv) goroutines</code>
    ログイン後にコピー

    これにより、ゴルチンの番号付きリストが表示されます。

  2. ゴルチンを切り替えます:
    別のゴルウチンに切り替えるには、 goroutineコマンドを使用して、検査するゴルウチンの数を使用します。

     <code class="delve">(dlv) goroutine 2</code>
    ログイン後にコピー

    このコマンドは、指定されたゴルウチンにコンテキストを変更します。

  3. ゴロウチン状態を検査します。
    info goroutinesコマンドを使用して、すべてのゴルチンの現在の状態に関する詳細情報を取得します。

     <code class="delve">(dlv) info goroutines</code>
    ログイン後にコピー
  4. ゴルチンのブレークポイントを設定します:
    ゴロウチンが起動される関数呼び出しでそれらを設定することにより、ゴルチン用に特にブレークポイントを設定できます。例えば:

     <code class="delve">(dlv) break main.someFunction</code>
    ログイン後にコピー

    次に、ブレークポイントがヒットしたら、ゴルチンを切り替えて状態を検査できます。

  5. スタックトレースを使用します:
    Delveのbtコマンド(BackTrace)を使用して、現在のゴルウチンのスタックを確認できます。

     <code class="delve">(dlv) bt</code>
    ログイン後にコピー
  6. ゴルチンの変数を検査します。
    ゴルウチンのコンテキストになったら、メインスレッドのように変数を検査できます。

     <code class="delve">(dlv) print myVariable</code>
    ログイン後にコピー

これらの手法を使用することにより、複数のゴルチンでGOプログラムの動作を効果的にデバッグして理解できます。

以上がGDBまたは他のデバッガーを使用して、GOコードをどのようにデバッグしますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート