GoLand 2026.3 Help

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

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

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

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

GitHub のサンプル Go アプリケーションを使用して、以下の手順に従うことができます。

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

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

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

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

  1. ターミナル ツールウィンドウ (表示 | ツールウィンドウ | ターミナル) を開き、コンパイラーの最適化とインライン化を無効にしてアプリケーションをビルドします:

    go build -gcflags="all=-N -l" -o myApp
    go build -gcflags="all=-N -l" -o myApp.exe
  2. コンパイルされた実行可能ファイルを実行します。

    ./myApp
    .\myApp.exe

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

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

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

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

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

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

リモートコンピューター上の Delve に接続して、そこで実行中の Go プロセスをデバッグできます。 次の例では、Linux リモートコンピューターと SSH トンネルを使用します。

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

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

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

  • リモートコンピューターのターミナルで、アプリケーションディレクトリを開いて次を実行します:

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

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

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

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

    • Delve でアプリケーションを起動します。 myApp は、 ステップ 1 でビルドされた実行可能ファイルです。

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

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

    • プロセスを実行すると、デバッガーは実行中のプロセスに接続します。 <PID> は、リモートコンピューター上のアプリケーションのプロセス識別子です。 そのコンピューターで ps などのツールを使用して見つけます。

      dlv --listen=127.0.0.1:2345 --headless=true --api-version=2 attach <PID>

デバッガーポートを転送する

  1. ローカルコンピューターのターミナルで、SSH トンネルを開始します:

    ssh -N -L 2345:127.0.0.1:2345 user@remote-host

    ユーザー と remote-host を SSH ユーザー名とリモートコンピューターのアドレスに置き換えます。 デバッグ中は SSH 接続を開いたままにしてください。

  2. 以下の説明に従って、GoLand を 127.0.0.1:2345 に接続します。 トンネルは、この接続をリモートコンピューター上の Delve に転送します。

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

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

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

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

  4. ホスト フィールドに、SSH トンネルを使用するために 127.0.0.1 と入力します。

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

  6. デバッグ をクリックしてください。

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

    下のビデオではデバッガーワークフローを示していますが、SSH トンネルセットアップより前の内容です。 上記の手順のリスナーアドレスとトンネルを使用してください。 ビデオでは、ダークテーマの IDE がローカルコンピューター上にあり、ライトテーマの IDE がリモートコンピューター上にあります。

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

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

次の手順では、ローカルコンピューター上の Docker を使用します。 他のコンピューターが接続できないように、デバッガーポートを 127.0.0.1 で公開します。

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

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

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

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

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

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

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

    バインドポート
  6. バインドポート フィールドで、 閲覧 (閲覧アイコン) をクリックします。

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

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

    --security-opt="apparmor=unconfined" --cap-add=SYS_PTRACE
  9. 実行 をクリックしてください。

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

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

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

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

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

  5. OK をクリックしてください。

    Docker デバッグ用の Go リモート実行/デバッグ構成を作成する

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

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

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

    ブレークポイント のブレークポイントについて続きを読む。

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

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

    次のビデオでは、コンテナーを実行してデバッガーを接続する方法を示します。 このビデオは、上記の手順にあるループバックポートバインディングより前の内容です。 デバッガーポートを非公開にするには、これらのバインディングを使用してください。

生産性のヒント

リモートデバッガーから切断する

切断時 の Go リモート 設定は、GoLand が切断する方法を決定します:

  • リモート Delve プロセスを停止する: Delve を実行したままにするか確認せずに停止します。

  • 実行したままにする: Delve を実行したままにします。 アプリケーションがまだ実行中の場合、GoLand は接続を閉じる前にブレークポイントをクリアし、実行を再開します。

  • 確認する (デフォルト): Delve が --accept-multiclient で起動されていた場合、 リモート Delve を停止 ダイアログで停止するかどうかを確認します。 それ以外の場合、GoLand はこのダイアログなしで Delve を停止します。

  1. Ctrl+F2 を押してデバッグセッションを終了します。

  2. リモート Delve を停止 ダイアログが開いた場合は、Delve を停止するかどうかを選択します。 選択内容を実行構成に保存するには、今後のプロンプトを無効化するチェックボックスを選択します。

  3. Delve がまだ実行中の既存のリモートプロセスにアタッチされている間に Delve を停止すると、 リモートプロセスを強制終了 ダイアログでそのプロセスを終了するかどうかを確認します。 アプリケーションを停止するか、実行したままにするかを選択します。

同じ Delve サーバーに再接続するには、 --accept-multiclient で起動します。 切断する前に、実行構成で 切断時 を 実行したままにする に設定するか、プロンプトが表示されたときに Delve の停止を拒否します。

2026 年 11 月 6 日