GoLand 2020.2ヘルプ

デバッガーで実行中の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
    • プロセスを実行すると、デバッガーは実行中のプロセスに接続します。 <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(英語)を使用できます。$GOPATH / src / debuggingTutorialDockerfileおよびmain.goを保存します。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
最終更新日: 2020年8月19日

関連ページ:

ブレークポイント

ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、単純な場合(たとえば、コード行に到達したときにプログラムを一時停止する場合)や、より複雑なロジック(追加の条件に対するチェック、ログメッ...

Docker

Dockerを使用すると、開発者はアプリケーションをコンテナー内にデプロイして、実稼働環境と同じ環境でコードをテストできます。GoLandは、Dockerプラグインを使用してDockerサポートを提供します。プラグインはバンドルされ、デフォルトで有効になっています。Dockerサポートを有効にするD...

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

ゴルーチンは、他の関数またはメソッドと同時に実行される関数またはメソッドです。ゴルーチンを作成するには、キーワードに続けて関数呼び出しを使用します(たとえば、)。ただし、多数のゴルーチンを使用すると、プログラムのデバッグが困難になります。ゴルーチンを区別するために、ゴルーチンにカスタムデータのラベル...

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

GoLandは、すべての開発、デバッグ、およびテストがコンピューター上で行われたことを前提としており、コードは実稼働環境にデプロイされています。この「ローカル開発-デプロイメント」モデルに固執する理由は、GoLandがコード補完、コードインスペクション、コードナビゲーション、およびその他のコーディン...