GoLand 2024.1 ヘルプ

デバッガーで実行中の 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

    このコマンドは、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 build -gcflags="all=-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 を取得できます。

      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 構成を実行する

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

関連ページ:

ブレークポイント

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

Docker

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

Mozilla rr を使用したデバッグ

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

テスト

テストはあなたのコードの振る舞いが正しいことと期待されることを保証します。よく書かれたテストでは、自分のコードが機能し、既存のコードが破損することはないという自信を持って開発することができます。GoLand には、テストを実行するために使用できるいくつかのパッケージが含まれています。また、選択したパッケージに特定のテスト範囲を適用できます。テスト用パッケージ:テスト目的で、GoLand には以下のパッケージが含まれています。gotest 標準の単体テストを実行するために使用します。の詳細について...