デバッガーで実行中の Go プロセスにアタッチする
GoLand では、 ローカルマシン、 リモートマシン 、または Docker コンテナーで実行中の Go プロセスにデバッガーを接続できます。
ローカルマシンのプロセスにアタッチする
コマンドラインから起動したアプリケーションをデバッグできます。 この場合、アプリケーションは IDE の外部で実行されますが、同じローカルマシン上で実行されます。 アプリケーションをデバッグするには、IDE でプロジェクトを開き、実行中のプロセスにデバッガーをアタッチする必要があります。
例として、 github.com にある次の Go コード(英語)を使用できます。
ステップ 1。 gops パッケージをインストールする
ターミナル ツールウィンドウ( )を開き、次のコマンドを実行します。
go install github.com/google/gops@latest(Ctrl+Alt+F5 )をクリックします。 通知ウィンドウで、 「go get gops」を呼び出す リンクをクリックします。

ステップ 1. アプリケーションをビルドして実行する
ステップ 2. 実行中のプロセスにアタッチしてデバッグする
ブレークポイントを設定するコード行の横にあるガターをクリックします。 提供されている例(英語)では、行 23 (
message := fmt.Sprintf("Hello %s!", r.UserAgent())) にブレークポイントを配置します。 ブレークポイント のブレークポイントについて続きを読む。をクリックするか、ショートカット Ctrl+Alt+F5 を使用します。
デバッガーで接続する ウィンドウでアプリケーションプロセスを選択し、 Enter を押します。
アプリケーション内のブレークポイントに関連付けられたイベントをトリガーします。 提供されているコード例を使用する場合は、ブラウザーで http://localhost:8080/ リンクを開いてください。
リモートマシン上のプロセスにアタッチする
リモートコンピューターに接続し、そのコンピューターで実行されている Go プロセスにデバッガーをアタッチできます。 リモートデバッガー (Delve) は、リモートコンピューターで実行されている必要があります。
Delve をインストールするには、次のコマンドを使用します。
ステップ 1。 リモートコンピューターでアプリケーションを構築する
ターミナル ツールウィンドウ( )を開き、次のコマンドを実行します。
go build -gcflags="all=-N -l" -o myApp.exeこのコマンドは、
myApp.exe実行可能ファイルをコンパイルし、コンパイラーの最適化とインライン展開を無効にします。
ステップ 1. リモートマシンで 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>

ステップ 2. ローカルコンピューターでデバッグプロセスを開始する
アプリケーションのコードを開き、ブレークポイントを配置します。 提供されているコード例(英語)では、行 23 (
message := fmt.Sprintf("Hello %s!", r.UserAgent())) にブレークポイントを設定します。 ブレークポイント のブレークポイントについて続きを読む。をクリックしてください。 または、ツールバーの実行 / デバッグ構成のリストをクリックして、 実行構成の編集 を選択します。
実行 / デバッグ構成 ダイアログで、 追加 ボタン(
)をクリックし、 Go リモート を選択します。
ホスト フィールドに、ホスト IP アドレス (たとえば、
localhostまたは192.168.1.33) を入力します。ポート フィールドに、 ステップ 2 で構成したデバッガーポート(たとえば、
2345)を入力します。デバッグ をクリックしてください。
アプリケーションのブレークポイントでイベントをトリガーします。 提供されているコード例(英語)を使用した場合は、ブラウザーで
http://<host_address>:8080/リンクを開きます。次のビデオでは、IDE のインスタンスが 2 つあります。ダークテーマの IDE はローカルコンピューター、ライトテーマの IDE はリモートコンピューターです。
Docker コンテナー内のプロセスにアタッチする
Docker コンテナー内で実行される Go プロセスにデバッガーをアタッチできます。 Docker の詳細については、 Docker(ドッカー) を参照してください。
例として、 この Go アプリケーション(英語)には 次の Dockerfile (英語) を使用できます。
ステップ 1。 Dockerfile 構成を作成する
をクリックしてください。 または、ツールバーの実行 / デバッグ構成のリストをクリックして、 実行構成の編集 を選択します。
実行 / デバッグ構成 ダイアログで、 追加 ボタン(
)をクリックし、 を選択します。
Dockerfile フィールドで、 閲覧 アイコン(
)をクリックし、ファイルブラウザーで Dockerfile に移動します。 このセクションの例を使用する場合は、 この Dockerfile(英語) に移動します。
「コンテナー名 」フィールドに、コンテナー名(たとえば、
debugging-tutorial)を入力します。実行 / デバッグ構成 ダイアログで、 変更 をクリックし、 バインドポート と 実行オプション を選択します。

バインドポート フィールドで、 閲覧 (
) をクリックします。
ポートバインディング ダイアログで、 追加 ボタン (
) をクリックします。 ホストポート 列に、
8080と入力します。 コンテナーポート 列をクリックし、8080と入力します。 さらに、ポート40000に同じバインドを作成します。
実行オプション フィールドで、Docker のコマンドラインオプションを指定します。 Dockerfile で提供されている例では、 セキュリティプロファイル(英語)を無効にして、
SYS_PTRACELinux 機能(英語)を追加します。--security-opt="apparmor=unconfined" --cap-add=SYS_PTRACE実行 をクリックしてください。

ステップ 1. Go リモート実行 / デバッグ構成を作成する
ステップ 2. デバッグプロセスを開始する
サービス ツールウィンドウ( )で、 を展開します。 作成されたコンテナーが実行中であり、事前構成されたデバッガーポートをリッスンしていることを確認します。
ブレークポイントを配置するには、コード行の近くのガターをクリックします。 例: 提供されているコード例(英語)では、行 23 (
message := fmt.Sprintf("Hello %s!", r.UserAgent())) にブレークポイントを配置します。ブレークポイント のブレークポイントについて続きを読む。
ツールバーの実行 / デバッグ構成のリストから、 作成した Go リモート構成を選択し、 デバッグ <構成名> ボタン (
) をクリックします。 または、 Alt+Shift+F9 を押して、作成した Go リモート構成を選択します。
アプリケーションのブレークポイントでイベントをトリガーします。 提供されているコード例を使用した場合は、ブラウザーで http://localhost:8080/ を開いてください。
次のビデオでは、コンテナーを実行し、リモート実行 / デバッグ構成を作成し、デバッグのためにコンテナーに接続する方法を説明します。
生産性のヒント
リモートプロセスを終了する
Ctrl+F2 を押すと、リモートデバッグセッション中にリモートプロセスを終了できます。 プロセスを終了したときに、プロセスに再接続できないことに注意してください。

