GoLand 2024.3 ヘルプ

デバッガーで実行中の Go プロセスにアタッチする

GoLand では、ローカルマシンリモートマシンDocker コンテナーで実行中の Go プロセスにデバッガーを接続できます。

ローカルマシンのプロセスにアタッチする

コマンドラインから起動したアプリケーションをデバッグできます。この場合、アプリケーションは IDE の外部で実行されますが、同じローカルマシン上で実行されます。アプリケーションをデバッグするには、IDE でプロジェクトを開き、実行中のプロセスにデバッガーをアタッチする必要があります。

例として、github.com にある次の Go コード(英語)を使用できます。

ステップ 1. gops パッケージをインストールする

  • ターミナルツールウィンドウ(表示 | ツールウィンドウ | ターミナル)を開き、次のコマンドを実行します。

    go get -t github.com/google/gops/
  • 実行 | プロセスにアタッチCtrl+Alt+F5)をクリックします。通知ウィンドウで、「go get gops」を呼び出すリンクをクリックします。

    Install the gops package

ステップ 2. アプリケーションをビルドして実行する

  1. 表示 | ツールウィンドウ | ターミナルに移動してターミナルツールウィンドウを開き、次のコマンドを実行します。

    go build -gcflags="all=-N -l" -o myApp.exe

    このコマンドは、myApp.exe 実行可能ファイルをコンパイルし、コンパイラーの最適化とインライン展開を無効にします。

  2. コンパイルされた実行可能ファイルを実行します。

    .\myApp.exe
    Build the application with gcflags flags

ステップ 3. 実行中のプロセスにアタッチしてデバッグする

  1. ブレークポイントを設定するコード行の横にあるガターをクリックします。提供されている例(英語)では、行 23 (message := fmt.Sprintf("Hello %s!", r.UserAgent())) にブレークポイントを配置します。ブレークポイントのブレークポイントの詳細については、こちらを参照してください。

  2. 実行 | プロセスにアタッチをクリックするか、ショートカット Ctrl+Alt+F5 を使用します。

  3. デバッガーで接続するウィンドウでアプリケーションプロセスを選択し、Enter を押します。

  4. アプリケーション内のブレークポイントに関連付けられたイベントをトリガーします。提供されているコード例を使用する場合は、ブラウザーで http://localhost:8080/ リンクを開きます。

リモートマシン上のプロセスにアタッチする

リモートコンピューターに接続し、そのコンピューターで実行されている Go プロセスにデバッガーをアタッチできます。リモートデバッガー (Delve) は、リモートコンピューターで実行されている必要があります。

Delve をインストールするには、次のコマンドを使用します。

go install github.com/go-delve/delve/cmd/dlv@latest

ステップ 1. リモートコンピューターでアプリケーションを構築する

  • ターミナルツールウィンドウ(表示 | ツールウィンドウ | ターミナル)を開き、次のコマンドを実行します。

    go build -gcflags="all=-N -l" -o myApp.exe

    このコマンドは、myApp.exe 実行可能ファイルをコンパイルし、コンパイラーの最適化とインライン展開を無効にします。

ステップ 2. リモートマシンで Delve を実行する

  • ホストマシンでデバッガーを起動するには、2 つのオプションがあります。

    • デバッガーがプロセスを実行します。ファイアウォールを使用する場合は、構成で使用されているポート(たとえば、2345)を公開します。使用されていない任意のポート番号を使用できます。myApp は、ステップ 1 で構築された実行可能ファイルの名前です。

      dlv --listen=:2345 --headless=true --api-version=2 exec ./myApp

      バイナリに引数をそのまま渡す必要がある場合は、前のコマンドに二重ダッシュ記号(--)を追加してから、必要なオプション(-- --config=/path/to/config/file など)を追加します。

    • プロセスを実行すると、デバッガーは実行中のプロセスに接続します。<PID> は、アプリケーションのプロセス識別子です。プロセスにアタッチコマンドを使用して、プロセス ID を取得できます。

      dlv --listen=:2345 --headless=true --api-version=2 attach <PID>
    Run Delve on the host machine

ステップ 3. ローカルコンピューターでデバッグプロセスを開始する

  1. アプリケーションのコードを開き、ブレークポイントを配置します。提供されているコード例(英語)では、行 23 (message := fmt.Sprintf("Hello %s!", r.UserAgent())) にブレークポイントを設定します。ブレークポイントのブレークポイントの詳細については、こちらを参照してください。

  2. 編集 | 実行構成をクリックします。または、ツールバーの実行 / デバッグ構成のリストをクリックして、実行構成の編集を選択します。

  3. 実行 / デバッグ構成ダイアログで、追加ボタン(the Add button)をクリックし、Go リモートを選択します。

  4. ホストフィールドに、ホスト IP アドレス (たとえば、localhost または 192.168.1.33) を入力します。

  5. ポートフィールドに、ステップ 2 で構成したデバッガーポート(たとえば、2345)を入力します。

  6. デバッグをクリックします。

  7. アプリケーションのブレークポイントでイベントをトリガーします。提供されているコード例(英語)を使用した場合は、ブラウザーで http://<host_address>:8080/ リンクを開きます。

    次のビデオには 2 つの IDE インスタンスがあります。ダークテーマを使用している IDE はローカルコンピューターであり、ライトテーマを使用している IDE はリモートコンピューターです。

Docker コンテナー内のプロセスにアタッチする

Docker コンテナー内で実行される Go プロセスにデバッガーをアタッチできます。Docker の詳細については、Docker を参照してください。

例として、この Go アプリケーション(英語)には次の Dockerfile (英語) を使用できます。

ステップ 1. Dockerfile 構成を作成する

  1. 編集 | 実行構成をクリックします。または、ツールバーの実行 / デバッグ構成のリストをクリックして、実行構成の編集を選択します。

  2. 実行 / デバッグ構成ダイアログで、追加ボタン(the Add button)をクリックし、Docker | Dockerfile を選択します。

  3. Dockerfile フィールドで、参照アイコン(the Browse icon)をクリックし、ファイルブラウザーで Dockerfile に移動します。このセクションの例を使用する場合は、この Dockerfile(英語) に移動します。

  4. コンテナー名」フィールドに、コンテナー名(たとえば、debugging-tutorial)を入力します。

  5. 実行 / デバッグ構成ダイアログで、変更をクリックし、バインドポート実行オプションを選択します。

    Bind ports
  6. バインドポートフィールドで、参照 (the Browse icon) をクリックします。

  7. ポートバインディングダイアログで、追加ボタン (the Add button) をクリックします。ホストポート列に、8080 と入力します。コンテナーポート列をクリックし、8080 と入力します。さらに、ポート 40000 に同じバインドを作成します。

    Bind ports
  8. 実行オプションフィールドで、Docker のコマンドラインオプションを指定します。Dockerfile で提供されている例では、セキュリティプロファイル(英語)を無効にして、SYS_PTRACE Linux 機能(英語)を追加します。

    --security-opt="apparmor=unconfined" --cap-add=SYS_PTRACE
  9. 実行をクリックします。

    Create a Dockerfile configuration

ステップ 2. Go リモート実行 / デバッグ構成を作成する

  1. 編集 | 実行構成をクリックします。または、ツールバーの実行 / デバッグ構成のリストをクリックして、実行構成の編集を選択します。

  2. 実行 / デバッグ構成ダイアログで、追加ボタン(the Add button)をクリックし、Go リモートを選択します。

  3. ホストフィールドに、ホストの IP アドレスを入力します(例: localhost)。

  4. ポートフィールドに、構成したデバッガーポートを入力します。この例では、40000 です。

  5. OK をクリックします。

    Create the Go Remote run/debug configuration for the Docker debugging

ステップ 3. デバッグプロセスを開始する

  1. サービスツールウィンドウ(表示 | ツールウィンドウ | サービス)で、Docker | コンテナーを展開します。作成されたコンテナーが実行中であり、事前構成されたデバッガーポートをリッスンしていることを確認します。

  2. ブレークポイントを配置するには、コード行の近くのガターをクリックします。例: 提供されているコード例(英語)では、行 23 (message := fmt.Sprintf("Hello %s!", r.UserAgent())) にブレークポイントを配置します。

    ブレークポイントのブレークポイントの詳細については、こちらを参照してください。

  3. ツールバーの実行 / デバッグ構成のリストから、作成した Go リモート構成を選択し、デバッグ <構成名> ボタン (the Debug button) をクリックします。または、Alt+Shift+F9 を押して、作成した Go リモート構成を選択します。

  4. アプリケーションのブレークポイントでイベントをトリガーします。提供されているコード例(英語)を使用した場合は、ブラウザーで http://localhost:8080/ を開きます。

    次のビデオでは、コンテナーを実行し、リモート実行 / デバッグ構成を作成し、デバッグのためにコンテナーに接続する方法を説明します。

生産性のヒント

リモートプロセスを終了する

  • Ctrl+F2 を押すと、リモートデバッグセッション中にリモートプロセスを終了できます。プロセスを終了したときに、プロセスに再接続できないことに注意してください。

関連ページ:

ブレークポイント

ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、たとえば、特定のコード行に到達したときにプログラムを一時停止するなどの単純なものから、追加の条件をチェックしたり、ログに書き込んだりするなどのより複雑なロジックを含むものまであります。ブレークポイントは、一度設定すると、一時的なブレークポイントを除き、明示的に削除するまでプロジェクト内に残ります。ブレークポイントの種類:GoLand

Docker

Docker は、分離された再現可能な環境で実行可能ファイルをデプロイおよび実行するためのツールです。これは、たとえば、本番環境と同じ環境でコードをテストする場合に役立ちます。GoLand は Docker 機能を統合し、Docker イメージの作成、Docker コンテナーの実行、Docker Compose アプリケーションの管理、パブリックおよびプライベート Docker レジストリの使用など、IDE から直接実行するための支援を提供します。Docker プラグインを有効にするこの機能は、デ...

Mozilla rr を使用したデバッグ

Mozilla rr は、アプリケーションの記録、再生、デバッグに使用できるツールです。Mozilla rr の主なアイデアは、自明ではないバグを見つけるのを手助けすることです。Mozilla rr は、プログラム全体の実行を記録します。これは、プログラムが実行を終了したときにのみ、記録されたトレースをデバッグできることを意味します。サーバーおよびその他の長時間実行アプリケーションの場合、実行中のアプリケーションを終了する必要があります(たとえば、コンソールから SIGTERM シグナルを送信す...