Mit Snapshots arbeiten

Nachdem Sie das Debugging in Cloud Debugger eingerichtet und Ihre Anwendung bereitgestellt oder gestartet haben, können Sie in der Quellkonsole Debug-Snapshots erstellen oder ansehen.

Snapshots – Übersicht

Snapshots erfassen die lokalen Variablen und den Aufrufstack an einer bestimmten Zeilenposition im Quellcode Ihrer Anwendung. Sie können einen Snapshot des Status Ihrer Anwendung basierend auf den von Ihnen angegebenen Bedingungen und Zeilenpositionen zurückgeben. Die Snapshot-Details helfen Ihnen beim Debuggen Ihres Codes.

Wenige Sekunden nach dem Festlegen der Zeilenposition werden die Snapshot-Einstellungen auf alle laufenden Instanzen Ihrer Anwendung angewendet. Wenn eine Instanz den Code an der Snapshot-Position zum ersten Mal ausführt, erstellt Debugger einen Snapshot und stellt ihn für die Anzeige zur Verfügung. Debugger implementiert mehrere Strategien zur Minimierung der bei der Datenerfassung auftretenden Latenz.

Snapshots sind während des Starts möglicherweise nicht verfügbar, wenn der Debugger initialisiert wird.

Debugging-Snapshot aufnehmen

  1. Öffnen Sie Cloud Source Repositories in der Google Cloud Console.

    Cloud Source Repositories öffnen

    Die Seite Alle Repositories wird geöffnet. Alternativ können Sie die Ansicht Meine Quelle öffnen.

  2. Klicken Sie auf den Namen eines Repositorys und gehen Sie zu der Datei, die den Quellcode enthält, den Sie sich ansehen möchten.

  3. Klicken Sie auf die Zeilennummer der Quellcode-Position.

    Snapshot-Speicherort auswählen

  4. Wählen Sie bei entsprechender Aufforderung die Anwendung aus, die Sie debuggen möchten, und klicken Sie dann auf Weiter.

    Snapshot-Anwendung auswählen

  5. Klicken Sie auf Snapshot erstellen.

    Snapshot erstellen

    Der neue Snapshot wird in einem angrenzenden Bereich der Google Cloud Console angezeigt.

    Neuer Snapshot

Snapshot-Bedingungen (optional)

Eine Snapshot-Bedingung ist ein Ausdruck, der true sein muss, damit der Snapshot erstellt wird. Es werden Ausdrücke in Java, Python und Go unterstützt. Snapshot-Bedingungen werden jedes Mal ausgewertet, wenn eine Instanz die Zeile ausführt, bis die Bedingung true ist oder für den Snapshot eine Zeitüberschreitung eintritt.

Die Bedingung ist ein vollständiger boolescher Ausdruck, der logische Operatoren enthalten kann:

travelAccessory == "Towel"
ultimateAnswer <= 42
travelAccessory == "Towel" && ultimateAnswer <= 42

Snapshot-Bedingung erstellen

  1. Klicken Sie in der GCP Console auf den Tab Snapshots und wählen Sie einen Snapshot aus.

    Snapshot auswählen

  2. Klicken Sie nach dem Öffnen des Steuerfelds Snapshot auf Snapshot bearbeiten.

    Snapshot bearbeiten

  3. Geben Sie im Feld Bedingung die Snapshot-Bedingung ein.

  4. Klicken Sie auf Aktualisieren.

Sie können die folgenden Sprachfunktionen verwenden, um Bedingungen auszudrücken:

Java

Die meisten Java-Ausdrücke werden unterstützt, darunter:
  • Lokale Variablen: a == 8.
  • Numerische und boolesche Operatoren: x + y < 20.
  • Instanzfelder und statische Felder: this.counter == 20, this.myObj.isShutdown, myStatic oder com.mycompany.MyClass.staticMember.
  • Stringvergleiche mit dem Gleichheitsoperator: myString == "abc".
  • Funktionsaufrufe. Es können ausschließlich schreibgeschützte Funktionen genutzt werden. Beispiel: StringBuilder.indexOf() wird unterstützt, StringBuilder.append() jedoch nicht.
  • Typumwandlung mit vollständig qualifizierten Typen: ((com.myprod.ClassImpl) myInterface).internalField.

Folgende Sprachfunktionen werden nicht unterstützt:

  • Entpacken numerischer Datentypen wie Integer; verwenden Sie stattdessen myInteger.value.

Python

Die meisten Python-Ausdrücke werden unterstützt, einschließlich:
  • Lesen lokaler und globaler Variablen
  • Lesen aus Arrays, Listen, Segmenten, Dictionaries und Objekten
  • Aufrufen einfacher Methoden

Folgende Sprachfeatures werden nicht unterstützt:

  • Aufruffunktionen, die neue Objekte zuweisen oder komplexe Konstrukte verwenden
  • Erstellen neuer Objekte innerhalb eines Ausdrucks

Go (Beta)

Der überwiegende Teil der Go-Syntax wird unterstützt, darunter:
  • Lesen lokaler und globaler Variablen
  • Lesen aus Arrays, Segmenten, Maps und Structs

Folgende Sprachfunktionen werden nicht unterstützt:

  • Lesen aus Schnittstellenwerten
  • Typumwandlungen und zusammengesetzte Literale
  • Alle Funktionsaufrufe außer len.

Ausdrücke (optional)

Mit Snapshot-Ausdrücken können Sie komplexe Ausdrücke auswerten oder Objekthierarchien durchsuchen, wenn ein Snapshot aufgenommen wurde. Bei den Ausdrücken werden die gleichen Sprachfunktionen unterstützt wie bei den vorstehend beschriebenen Snapshot-Bedingungen.

Hier sind typische Verwendungszwecke für Ausdrücke:

  • Aufrufen statischer oder globaler Variablen, die nicht Bestandteil des lokalen Variablensatzes sind

  • Aufrufen komplex verschachtelter Membervariablen, ohne jedes Mal eine lokale Variable im Debugger-Bereich aufschlüsseln zu müssen

  • Vermeiden wiederholter mathematischer Berechnungen Zum Beispiel durch Berechnung einer Zeitspanne in Sekunden mit (endTimeMillis - startTimeMillis) / 1000.0.

Ausdruck hinzufügen

  1. Klicken Sie im unteren Bereich der GCP Console auf den Tab Snapshot und wählen Sie einen Snapshot aus.

    Snapshot auswählen

  2. Klicken Sie im angezeigten Steuerfeld auf Snapshot bearbeiten.

    Snapshot bearbeiten

  3. Geben Sie im Feld Ausdruck den Ausdruck ein.

    Wenn Sie Ausdrücke hinzufügen möchten, drücken Sie die Tabulatortaste.

  4. Klicken Sie auf Aktualisieren.

Snapshot ansehen

Snapshot-Daten werden in der Quellkonsole angezeigt, nachdem die Anwendung den Code an dem von Ihnen angegebenen Speicherort ausgeführt hat.

  1. Klicken Sie im unteren Bereich der GCP Console auf den Tab Snapshot und wählen Sie einen Snapshot aus.

    Snapshot auswählen

    In einem Steuerfeld mit Snapshot-Details werden die Werte der Instanzvariablen und der Stacktrace am Speicherort des Snapshot-Codes angezeigt.

    Snapshot ansehen

    Sobald der Snapshot aufgenommen wurde, können Sie sofort die Werte der lokalen Variablen prüfen und die tieferen Datenstrukturen genau untersuchen. Außerdem können Sie auf den Frame eines beliebigen Aufrufstacks klicken, um die lokalen Variablen auf der jeweiligen Stackebene zu analysieren.

Snapshot noch einmal aufnehmen

Ein Snapshot wird nur einmal aufgenommen. So erstellen Sie einen weiteren Snapshot Ihres Anwendungsstatus am selben Speicherort:

  1. Halten Sie im Steuerfeld Snapshot der GCP Console den Mauszeiger über den Snapshot.

  2. Klicken Sie auf Neu erstellen.

Snapshot neu erstellen

Snapshot-Position löschen

  1. Halten Sie im Steuerfeld Snapshot der GCP Console den Mauszeiger über den Snapshot.

  2. Klicken Sie auf Löschen .

Snapshots teilen

Sie können einen Snapshot für ein anderes Projektmitglied teilen, indem Sie die Snapshot-URL aus Ihrem Browser teilen. Sie können diese URL auch speichern, um die Ergebnisse später noch einmal anzuzeigen. Debugger erstellt für jeden aufgenommenen Snapshot eine neue URL. Auf diese Weise können Sie die Ergebnisse als separate Sets teilen, auch wenn sie von Snapshots stammen, die an derselben Codeposition aufgenommen wurden.

Nächste Schritte