Cloud Debugger verwenden

Mit Cloud Debugger können Sie den Aufrufstapel und lokale Variablen von einer in der Cloud ausgeführten Live-Anwendung auf einer Vielzahl von Plattformen wie App Engine, Compute Engine, GKE und Cloud Run erfassen und prüfen, ohne dass die Anwendung beendet oder verlangsamt wird.

Er funktioniert ungefähr wie der Standard-Debugger Ihrer IDE und hat die gleiche Benutzeroberfläche, mit zwei wichtigen Ausnahmen:

  • Debugger unterbricht das Ausführen der laufenden Anwendung nicht.
  • Debugger führt Sie nicht Schritt für Schritt durch eine Anwendung.

Weitere Informationen zum Debugger-Support für Plattformen finden Sie in diesem Leitfaden.

Anforderungen

Zum Ausführen von Debugger benötigen Sie Folgendes:

Debugger nutzen

So verwenden Sie den Debugger:

  1. Öffnen Sie Ihr Projekt in IntelliJ.
  2. Wählen Sie Run > Edit Configurations aus.
  3. Klicken Sie links oben auf das Pluszeichen (+) und wählen Sie aus der Drop-down-Liste Cloud Debugger aus.
  4. Geben Sie einen Namen für Ihre Konfiguration im Feld Name ein.
  5. Stellen Sie sicher, dass Sie Ihr Projekt im Feld Project (Projekt) ausgewählt haben.
  6. Klicken Sie auf OK.
  7. Klicken Sie auf das grüne "Debug"-Symbol in der Symbolleiste, um den Debugger zu starten.
  8. Wählen Sie im Dialogfeld Attach to an Application (Einer Anwendung zuordnen) das Back-End-Modul zur Fehlerbehebung aus und klicken Sie auf Attach (Zuordnen).

Snapshot-Position festlegen

Ein Snapshot erfasst die lokalen Variablen und den Aufrufstapel an der angegebenen Position in Ihrem Quellcode. Die Snapshot-Position gilt für alle ausgeführten Instanzen Ihrer Anwendung.

So legen Sie eine Snapshot-Position fest:

  1. Gehen Sie zur Datei mit dem zu überwachenden Quellcode, nachdem Sie Debugger einer laufenden Anwendung hinzugefügt haben.
  2. Klicken Sie in den linken Bundstegbereich der ausführbaren Zeilen, für die Sie einen Snapshot erstellen möchten, so als würden Sie einen Zeilenhaltepunkt für eine lokale Anwendung mit dem regulären IDEA-Debugger festlegen.

    Im Bundsteg wird die Snapshot-Position durch einen blauen Kreis markiert und im Snapshots-Bereich von Debugger werden ausstehende Snapshots angezeigt.

  3. Klicken Sie auf den blauen Kreis, um die Snapshot-Position zu entfernen.

Im folgenden Beispiel ist die Snapshot-Position in dieser Zeile festgelegt: if (userAgent != null) {.

Grafik: Ort des Snapshots festlegen

Snapshot abrufen

Wenn eine Instanz den Code an der festgelegten Snapshot-Position zum ersten Mal ausführt, erfasst der Debugger einen Snapshot und stellt ihn zur Ansicht bereit. Sie können den Snapshot dann analysieren und mithilfe der Daten Fehler in der Anwendung beheben.

Für den Snapshot wird im Snapshot-Bereich von Debugger jetzt statt Ausstehend der Zeitpunkt angezeigt, an dem Stackdriver den Snapshot erfasst hat.

Grafik: Stacktrace ansehen

Erweiterte Konzepte

Snapshot-Bedingung erstellen

Eine Snapshot-Bedingung ist ein boolescher Ausdruck, der den Debugger anweist, nur dann einen Snapshot aufzunehmen, wenn das Ergebnis "wahr" ist, z. B. x !=0. Die Bedingung ist ein vollständiger boolescher Ausdruck, der logische und numerische Operatoren enthalten kann, zum Beispiel score < 0 || score > 500.

Watch-Ausdrücke

Manchmal ist die Information zur Fehlerbehebung nicht sofort in den lokalen Variablen und Feldern der Anwendung sichtbar. Insbesondere beim Ausführen in App Engine verhindert der Security Manager eine zu intensive Überprüfung der privaten Mitglieder von Systemklassen wie java.util.Hashmap. In solchen Fällen dient ein Watch-Ausdruck als effektive temporäre lokale Variable, um zusätzliche Informationen freizugeben. Watch-Ausdrücke können komplexe Ausdrücke auswerten und Objekthierarchien durchsuchen, nachdem ein Snapshot aufgenommen wurde.

Sie können einen Watch-Ausdruck angeben, nachdem Sie die Snapshot-Position festgelegt haben. Watch-Ausdrücke unterstützen die gleichen Sprachfunktionen wie die oben beschriebenen Snapshot-Bedingungen.

Support

Wenn Sie uns Feedback geben möchten, können Sie Probleme auf GitHub melden oder eine Frage in Stack Overflow stellen.