GoLand 2020.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 のバージョンに応じて次のコマンドを実行します。

    • 1.10 以降に移動します。

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

    • 1.9 以前を実行します。

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

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

  2. コンパイルされた実行可能ファイル( ./myApp など)を実行します。

    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/ リンクを開きます。

    Attach to and debug the running process

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

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

ステップ 1. ホストマシンでアプリケーションをビルドする

  1. $GOPATH アプローチを使用する場合、プロジェクトがホストマシンとクライアントマシンの $GOPATH への同じ相対パスでコンパイルされていることを確認してください。例: ホスト上のアプリケーションのコードが $GOPATH/src/debuggingTutorial/ にある場合。クライアントのコードは同じディレクトリ($GOPATH/src/debuggingTutorial/ )にある必要があります。

  2. ターミナルツールウィンドウ(表示 | ツールウィンドウ | ターミナル)を開き、Go のバージョンに応じて次のコマンドを実行します。

    • 1.10 以降に移動します。

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

    • 1.9 以前を実行します。

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

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

    Build the application with gcflags flags for remote debugging

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

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

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

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

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

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

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

ステップ 3. クライアントコンピューターで Go リモート実行 / デバッグ構成を作成する

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

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

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

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

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

    Create the Go Remote run/debug configuration on the client computer

ステップ 4. クライアントコンピューターでデバッグプロセスを開始する

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

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

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

    Start the debugging process on the client computer

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

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

例として、この Go アプリケーションに (英語) 次の Dockerfile(英語) を使用できます。 Dockerfilemain.go$GOPATH/src/debuggingTutorial に保存します。 DockerfiledebuggingTutorial ディレクトリを使用することに注意してください。プロジェクトに別のディレクトリを使用する場合は、Dockerfile のディレクトリ名を変更してください。

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

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

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

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

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

  5. バインドポートフィールドで、参照アイコン( the Browse icon )をクリックします。追加ボタン( the Add button )をクリックします。ホストポート列に 8080 と入力します。コンテナーポート列をクリックし、8080 と入力します。また、ポート 40000 に同じバインディングを追加します。

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

    --security-opt="apparmor=unconfined" --cap-add=SYS_PTRACE
  7. OK をクリックします。

    Create a Dockerfile configuration

ステップ 2. Dockerfile 構成を実行する

  • ツールバーの実行 / デバッグ構成のリストから、作成された Dockerfile 構成を選択し、<configuration_name> を実行しますボタン( the Run button )をクリックします。

    Run the Dockerfile configuration

ステップ 3. 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

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

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

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

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

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

    Start the debugging process on the client computer

生産性のヒント

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

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

    terminate the remote process

関連ページ:

ブレークポイント

ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、単純な場合(たとえば、コード行に到達したときにプログラムを一時停止する場合)や、より複雑なロジック(追加の条件に対するチェック、ログメッセージの書き込みなど)を伴う場合があります。一度設定すると、ブレークポイントは、一時的なブレークポイントを除いて、明示的に削除するまでプロジェクトに残ります)。ブレークポイントを持つファイルが外部で変...

Docker

Docker を使用すると、開発者は、本番環境と同じ環境でコードをテストするために、コンテナー内にアプリケーションをデプロイできます。GoLand は、Docker プラグインを使用して Docker サポートを提供します。プラグインはバンドルされており、デフォルトで有効になっています。Docker サポートを有効にする Docker をインストールして実行します。詳しくは、Docker のドキュメントを参照してください。Docker デーモンの接続設定を構成します。設定 / 環境設定ダイアログで、...

プロファイラーラベルの使用

ゴルーチンは、他の関数またはメソッドと同時に実行される関数またはメソッドです。ゴルーチンを作成するには、キーワードに続けて関数呼び出しを使用します(たとえば、)。ただし、多数のゴルーチンを使用すると、プログラムのデバッグが困難になります。ゴルーチンを区別するために、ゴルーチンにカスタムデータのラベルを付けることができます。Go 1.9 以降、追加の情報を記録して、実行パスに関するより多くのコンテキストを提供できます。ラベルのセットをプロファイリングデータの一部として記録し、後でこれらのラベルを使...

アプリケーションをデプロイする

GoLand は、すべての開発、デバッグ、テストがコンピューター上で行われたことを前提としており、コードは実稼働環境にデプロイされています。この「ローカル開発 - デプロイ」モデルに固執する理由は、GoLand がコード補完、コードインスペクション、コードナビゲーション、その他のコーディング支援機能を提供する方法にあります。この機能はすべて、プロジェクトのロード時に GoLand がビルドし、コードの編集時にその場で更新されるプロジェクトファイルインデックスに基づいています。効率的なコーディング...