Cloud デバッガの使用

Cloud デバッガは、さまざまなプラットフォーム(App EngineCompute EngineGKECloud Run など)のクラウド内で実行されるライブ アプリケーションのコールスタックとローカル変数をキャプチャして調査できます。このとき、アプリが停止したり、実行速度が低下したりすることはありません。

動作は IDE の標準デバッガと非常によく似ており、ユーザー インターフェースも同じです。主な違いは次の 2 点です。

  • デバッガでは実行中のアプリケーションの一時停止がありません。
  • デバッガではアプリケーションのステップスルーができません。

プラットフォームでのデバッガのサポートについて詳しくは、こちらのガイドをご覧ください。

要件

デバッガを実行するには、次のものが必要です。

デバッガの使用

デバッガを使用する手順は次のとおりです。

  1. IntelliJ 内でプロジェクトを開きます。
  2. [Run] > [Edit Configurations] を選択します。
  3. 左上隅のプラス記号(+)をクリックし、プルダウン リストから [Cloud Debugger] を選択します。
  4. [Name] フィールドに構成名を入力します。
  5. プロジェクトが [Project] フィールドで選択されていることを確認します。
  6. [OK] をクリックします。
  7. ツールバーの緑色のバグ「デバッグ」アイコンをクリックしてデバッガを起動します。
  8. [Attach to an Application] ダイアログでデバッグするバックエンド モジュールを選択し、[Attach] をクリックします。

スナップショットの場所の設定

スナップショットは、ソースコード内の指定された場所にあるローカル変数とコールスタックを取得します。スナップショットの場所は、アプリケーションの実行中のすべてのインスタンスに適用されます。

スナップショットの場所を設定する手順は次のとおりです。

  1. 実行中のアプリケーションにデバッガを接続したら、監視するソースコードを含むファイルに移動します。
  2. 標準の IDEA デバッガを使用して、ローカル アプリケーションに行ブレークポイントを設定するときと同じように、左のガター領域でスナップショットをとる実行可能行をクリックします。

    ガターにスナップショットの場所をマークする青い円が表示され、デバッガのスナップショットのペインに保留中のスナップショットが表示されます。

  3. スナップショットの場所を削除するには、青い円をクリックします。

次の例では、if (userAgent != null) { 行にスナップショットの場所が設定されています。

スナップショットの場所の設定

スナップショットの取得

いずれかのインスタンスが、設定したスナップショットの場所でコードを最初に実行したときに、デバッガはスナップショットを作成し、これを表示できるようにします。その後、スナップショットを調べて、そのデータを用いてアプリケーションをデバッグできます。

デバッガのスナップショットのペインのスナップショットのラベルが [Pending] からデバッガがスナップショットを取得した時刻に変わります。

スタック トレースを表示

高度なコンセプト

スナップ ショット条件の設定

スナップショット条件はブール型の式で、デバッガに対して、条件が true と評価される場合に限り、スナップショットをとるように通知します。たとえば、x !=0 などです。この条件は、論理演算子と数値演算子を含めることができる完全なブール式です。たとえば、score < 0 || score > 500 などです。

watch 式

問題をデバッグするために必要な情報が、アプリケーションのローカル変数とフィールドですぐに明らかにならないことがあります。特に App Engine で実行するときは、セキュリティ マネージャーが機能しているため、システムクラスのプライベート メンバー(たとえば java.util.Hashmap)をデベロッパーが深く調査することはできません。このような場合、watch 式は効果的な一時ローカル変数として機能し、追加情報を公開します。watch 式を使用すると、スナップショットの作成時に複雑な式の評価や、オブジェクト階層の走査ができます。

スナップショットの場所の設定後に watch 式を指定できます。watch 式は、上記のスナップショット条件と同じ言語機能をサポートします。

サポートの利用

フィードバックを送信するには、GitHub で問題を報告します。または、Stack Overflow で質問します。