Utiliser des instantanés

Après avoir configuré le débogage dans Cloud Debugger et déployé ou démarré votre application, vous pouvez prendre ou afficher des instantanés de débogage dans la console source.

Présentation des instantanés

Les instantanés enregistrent les variables locales et la pile d'appel au niveau d'une ligne spécifique dans le code source de votre application. Vous pouvez renvoyer un instantané de l'état de votre application en fonction des conditions et des emplacements de ligne que vous spécifiez. Les détails de l'instantané peuvent vous aider à déboguer le code.

Quelques secondes après avoir défini l'emplacement de la ligne, les paramètres de l'instantané s'appliquent à toutes les instances en cours d'exécution de votre application. La première fois qu'une instance exécute le code à l'emplacement de l'instantané, Debugger prend un instantané et le met à disposition pour consultation. Debugger met en œuvre plusieurs stratégies pour réduire la latence générée par l'enregistrement des données.

Les instantanés peuvent ne pas être disponibles au démarrage pendant l'initialisation du débogueur.

Prendre un instantané de débogage

  1. Dans Google Cloud Console, ouvrez Cloud Source Repositories.

    Ouvrir Cloud Source Repositories

    La page Tous les dépôts s'affiche. Vous pouvez également ouvrir la vue Ma source.

  2. Cliquez sur le nom d'un dépôt et accédez au fichier contenant le code source que vous souhaitez consulter.

  3. Cliquez sur le numéro de ligne de l'emplacement du code source.

    Sélectionner l'emplacement de l'instantané

  4. Lorsque vous y êtes invité, sélectionnez l'application que vous souhaitez déboguer, puis cliquez sur Continuer.

    Sélectionner une application d'instantané

  5. Cliquez sur Créer un instantané.

    Créer un instantané

    Le nouvel instantané s'affiche dans un volet adjacent de Google Cloud Console.

    Nouvel instantané

Conditions d'instantané (facultatif)

Une condition d'instantané est une expression qui doit renvoyer la valeur true pour que l'instantané soit pris. Les expressions Java, Python et Go sont compatibles. Les conditions d'instantané sont évaluées chaque fois qu'une instance exécute la ligne jusqu'à ce que la condition renvoie la valeur true ou que l'instantané arrive à expiration.

La condition est une expression booléenne complète pouvant inclure des opérateurs logiques :

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

Définir une condition d'instantané

  1. Dans la console GCP, cliquez sur l'onglet Instantanés, puis sélectionnez un instantané.

    Sélectionner un instantané

  2. Une fois le panneau Instantané ouvert, cliquez sur Modifier l'instantané.

    Modifier un instantané

  3. Dans le champ Condition, saisissez la condition de l'instantané.

  4. Cliquez sur Mettre à jour.

Vous pouvez exprimer les conditions à l'aide des fonctionnalités de langage suivantes.

Java

La plupart des expressions Java sont compatibles, y compris les suivantes :
  • Variables locales : a == 8
  • Opérations numériques et booléennes : x + y < 20
  • Champs d'instance et champs statiques : this.counter == 20, this.myObj.isShutdown, myStatic ou com.mycompany.MyClass.staticMember
  • Comparaisons de chaînes avec l'opérateur d'égalité : myString == "abc"
  • Appels de fonctions. Seules les fonctions en lecture seule peuvent être utilisées. Par exemple, la fonction StringBuilder.indexOf() est acceptée, mais StringBuilder.append() ne l'est pas.
  • Diffusion de type, avec des types complets : ((com.myprod.ClassImpl) myInterface).internalField

Les fonctionnalités de langage suivantes ne sont pas compatibles :

  • Déballage de types numériques, tels que Integer. Utilisez plutôt myInteger.value.

Python

La plupart des expressions Python sont compatibles, y compris les suivantes :
  • Lecture des variables locales et globales
  • Lecture à partir de tableaux, de listes, de tranches de tableau, de dictionnaires et d'objets
  • Appel de méthodes simples

Les fonctionnalités de langage suivantes ne sont pas compatibles :

  • Appel de fonctions qui allouent de nouveaux objets ou utilisent des constructions complexes
  • Création d'objets dans l'expression

Go (bêta)

La syntaxe de la plupart des expressions Go est compatible, y compris les suivantes :
  • Lecture des variables locales et globales
  • Lecture à partir de tableaux, de tranches de tableau, de cartes et de structures

Les fonctionnalités de langage suivantes ne sont pas compatibles :

  • Lecture à partir des valeurs d'interface
  • Conversion de type et valeurs littérales composites
  • Appel de fonctions autres que len

Expressions (facultatif)

Les expressions d'instantané vous permettent d'évaluer des expressions complexes ou de parcourir des hiérarchies d'objets lors de la prise d'un instantané. Les expressions sont compatibles avec les mêmes fonctionnalités de langage que les conditions d'instantané décrites ci-dessus.

Voici quelques cas d'utilisation des expressions :

  • Afficher les variables statiques ou globales qui ne font pas partie de l'ensemble de variables locales.

  • Afficher facilement les variables de membre profondément imbriquées sans avoir à développer chaque fois une variable locale dans le panneau du débogueur.

  • Éviter les calculs mathématiques répétitifs. Par exemple, vous pouvez calculer une durée en secondes à l'aide de l'expression (endTimeMillis - startTimeMillis) / 1000.0.

Ajouter une expression

  1. Dans le volet inférieur de la console GCP, cliquez sur l'onglet Instantanés, puis sélectionnez un instantané.

    Sélectionner un instantané

  2. Dans le panneau qui s'affiche, cliquez sur Modifier l'instantané.

    Modifier un instantané

  3. Dans le champ Expression, saisissez l'expression.

    Pour ajouter des expressions, appuyez sur la touche Tabulation.

  4. Cliquez sur Mettre à jour.

Afficher un instantané

Les données d'instantané apparaissent dans la console source après que l'application a exécuté le code à l'emplacement indiqué.

  1. Dans le volet inférieur de la console GCP, cliquez sur l'onglet Instantanés, puis sélectionnez un instantané.

    Sélectionner un instantané

    Un panneau contenant des détails de l'instantané affiche les valeurs des variables d'instance ainsi que la trace de la pile au niveau de l'emplacement du code de l'instantané.

    Afficher l'instantané

    Vous pouvez examiner la valeur des variables locales au moment où l'instantané a été pris et explorer les structures de données plus profondes. Vous pouvez également cliquer sur n'importe quel cadre de pile d'appels et examiner les variables locales à ce niveau de la pile.

Reprendre un instantané

Un instantané n'est pris qu'une seule fois. Pour prendre un autre instantané de l'état de votre application au même emplacement, procédez comme suit :

  1. Dans le panneau Instantanés de la console GCP, gardez le pointeur de la souris sur l'instantané.

  2. Cliquez sur Reprendre.

Reprendre un instantané

Supprimer un emplacement d'instantané

  1. Dans le panneau Instantanés de la console GCP, gardez le pointeur de la souris sur l'instantané.

  2. Cliquez sur Supprimer ().

Partager des instantanés

Vous pouvez partager un instantané avec un autre membre du projet en partageant l'URL de l'instantané depuis votre navigateur. Vous pouvez également enregistrer cette URL pour référence ultérieure et y revenir pour afficher ses résultats. Debugger utilise une nouvelle URL pour chaque instantané pris. Cela vous permet de partager des ensembles de résultats distincts, même s'ils ont été enregistrés au même emplacement dans le code.

Étape suivante