Concepts

Cette page décrit les rôles clients, le modèle de données, ainsi que les opérations prises en charge dans l'API Stackdriver Debugger.

Rôles clients

L'API définit deux types de rôles clients, les agents et les clients de débogage.

Agents

Un agent est un programme qui s'exécute sur un système où une application à déboguer est également en cours d'exécution. L'agent est chargé d'envoyer des données d'état (telles que les valeurs des variables du programme et la pile des appels) à Stackdriver Debugger lorsque le code présent au niveau d'un point d'arrêt est exécuté.

Vous pouvez utiliser plus d'un agent par application à déboguer. Par exemple, vous pouvez avoir besoin de déboguer une application composée de plusieurs tâches exécutables. En ce cas, chaque tâche est associée à un agent spécifique, mais l'ensemble de ces tâches forme un seul et même élément à déboguer. En revanche, si vous exécutez plusieurs versions d'une application, chaque version correspond à un élément distinct qui peut être débogué indépendamment des autres.

Parmi les agents disponibles, on peut par exemple citer les agents de débogage fournis par Google. Vous pouvez les utiliser avec des applications écrites en Java ou Go et exécutées sur Google Compute Engine.

Clients de débogage

Un client de débogage est une application qui permet à l'utilisateur de définir ou supprimer des points d'arrêt, ainsi que d'afficher les données d'état capturées au niveau des points d'arrêt (également connues sous le nom d'instantanés). Par exemple, l'outil Stackdriver Debugger qui peut être exécuté dans la console Google Cloud Platform est un client de débogage. Un IDE dans lequel vous ajoutez une fonctionnalité de débogage peut également être considéré comme un client de débogage.

Modèle de données

Le modèle de données de l'API fournit des entités pour les éléments à déboguer et les points d'arrêt, ainsi que des types de données d'état qu'un agent peut collecter lorsque du code est exécuté au niveau d'un point d'arrêt.

Éléments à déboguer

Un élément à déboguer (debuggee) est une application qu'un utilisateur souhaite déboguer. Comme nous l'avons vu précédemment dans ce document, les tâches composant une application sont considérées comme un seul et même élément à déboguer, elles partagent donc le même ID de débogage. Souvenez-vous toutefois que différentes versions de la même application sont considérées comme des éléments à déboguer distincts. Les éléments à déboguer sont représentés dans l'API par l'entité Debuggee (REST ou RPC).

Points d'arrêt

Un point d'arrêt est une entité qui indique à un agent où et quand il doit collecter des données d'état concernant une application. Il assure en outre le stockage des données d'état collectées.

Un point d'arrêt spécifie les éléments suivants :

  • Emplacement dans le code source de l'élément à déboguer
  • Expression conditionnelle que l'agent utilise pour déterminer quand il doit collecter des données d'état
  • Expressions à évaluer lorsque les données sont collectées

Lorsque des données d'état sont collectées à partir de l'élément à déboguer, elles peuvent inclure :

  • Les valeurs des variables du programme
  • La pile des appels
  • Les valeurs des expressions qui ont été évaluées

Les points d'arrêt sont représentés par l'entité Breakpoint (RPC ou REST).

Emplacements source

Un emplacement source définit un point spécifique dans l'application ciblée par le débogage (chemin de fichier et numéro de ligne). Les emplacements sources sont représentés par l'entité SourceLocation (RPC ou REST).

Variables

Une variable contient les informations qui sont présentes dans un objet de programme (nommé ou non) au moment où les données d'état sont collectées par un agent. Une variable peut par exemple contenir la valeur d'une variable locale de type "entier" ou un certain nombre d'éléments qui sont eux-mêmes des variables. Les variables sont représentées par l'entité Variable (RPC ou REST).

Messages d'état

Un message d'état fournit des informations sur l'état des points d'arrêt et/ou des variables. Par exemple, un point d'arrêt défini sur un emplacement source non valide peut contenir un message d'état indiquant une erreur. Les messages d'état sont représentés par l'entité StatusMessage (RPC ou REST).

Messages de format

Un message de format est le contenu textuel d'un message d'état. Les messages de format sont représentés par l'entité FormatMessage (RPC ou REST).

Opérations

Les interfaces Contrôleur (Controller) et Débogueur (Debugger) fournissent un ensemble d'opérations qui peuvent être effectuées respectivement par les agents et par les clients de débogage.

Opérations spécifiques aux agents

L'interface Contrôleur permet aux agents d'effectuer les opérations suivantes :

Opération Description REST RPC
Enregistrer Cette opération inscrit l'élément à déboguer auprès du service du contrôleur. register RegisterDebuggee
Lister les points d'arrêt actifs Cette opération renvoie la liste de tous les points d'arrêt actifs pour l'élément à déboguer spécifié. list ListActiveBreakpoints
Mettre à jour les points d'arrêt actifs Cette opération met à jour les données d'état (telles que les valeurs des variables du programme et la pile des appels) pour l'application au niveau du point d'arrêt. update UpdateActiveBreakpoint

Généralement, les opérations sont effectuées par un agent dans l'ordre suivant :

  1. Lorsque l'application démarre, l'agent l'enregistre en tant qu'élément à déboguer à l'aide de la méthode register ou RegisterDebugger.

  2. À intervalles réguliers, l'agent appelle la méthode list ou ListActiveBreakpoints pour récupérer les points d'arrêt actuellement définis.

  3. Lorsque l'application atteint un point d'arrêt défini au niveau du code, l'agent collecte les données d'état (valeurs des variables du programme ou pile des appels par exemple) et les transmet au service du contrôleur à l'aide de la méthode update ou UpdateActiveBreakpoint.

Opérations spécifiques aux clients de débogage

L'interface du débogueur permet aux clients de débogage d'effectuer les actions suivantes :

Opération Description REST RPC
Lister les éléments à déboguer Cette opération répertorie les éléments à déboguer dans lesquels l'utilisateur du client peut définir des points d'arrêt. list ListDebuggees
Définir un point d'arrêt Cette opération définit un emplacement de point d'arrêt. set SetBreakpoint
Lister les points d'arrêt Cette opération renvoie la liste des points d'arrêt auxquels l'utilisateur actuel est autorisé à accéder. list ListBreakpoints
Récupérer un point d'arrêt Cette opération récupère des informations détaillées sur le point d'arrêt (par ID de point d'arrêt ou ID d'élément à déboguer). get GetBreakpoint
Supprimer un point d'arrêt Cette opération supprime le point d'arrêt spécifié. delete DeleteBreakpoint

Généralement, les opérations sont effectuées par un client de débogage dans l'ordre suivant :

  1. Lorsqu'un utilisateur démarre le flux de travail de débogage, par exemple en ouvrant la vue du débogueur dans l'interface utilisateur de l'application cliente, le client appelle la méthode list ou ListDebugees pour récupérer la liste des versions de l'application disponibles pour le débogage. L'utilisateur a la possibilité de sélectionner celles qui seront concernées par l'opération de débogage.

  2. Lorsque l'utilisateur crée un point d'arrêt dans l'interface utilisateur, l'application cliente appelle l'opération set ou SetBreakpoint pour définir le point d'arrêt.

  3. À intervalles réguliers, l'application cliente appelle la méthode get ou GetBreakpoint pour vérifier si un élément à déboguer a exécuté du code au niveau du point d'arrêt et si l'agent a mis à jour les données d'état du point d'arrêt. Le cas échéant, l'application cliente affiche les données d'état à l'utilisateur.

  4. Si l'utilisateur supprime le point d'arrêt dans l'interface utilisateur, le client appelle la méthode delete ou DeleteBreakpoint.