Débogueur

Le débogueur montre l’état du contrat lors de l’exécution d’une transaction.

Il peut être utilisé pour les transactions créées sur Remix ou en fournissant le hachage d’une transaction. Cette dernière solution suppose que vous disposiez du code source du contrat ou que vous ayez saisi l’adresse d’un contrat vérifié.

Pour démarrer une session de débogage, vous pouvez soit

  • Cliquez sur le bouton de débogage dans le terminal lorsqu’une transaction réussie ou échouée y apparaît. Le débogueur sera activé et prendra le focus dans le Panneau latéral.

  • Activez le débogueur dans le gestionnaire de plugins et cliquez ensuite sur le bogue dans le panneau d’icônes. Pour démarrer la session de débogage, saisissez l’adresse d’une transaction déployée - tout en ayant le code source dans l’éditeur - puis cliquez sur le bouton Débogage.

Le débogueur met en évidence le code concerné dans l’éditeur. Si vous souhaitez revenir à l’édition du code sans les surbrillances du débogueur, cliquez sur le bouton Arrêter le débogage.

Pour en savoir plus sur l’utilisation de cet outil, consultez la page Debugging Transactions.

Cette page présente l’option Utiliser les sources générées du débogueur, sa navigation et ses panneaux.

Utiliser les sources générées

This option is available for contracts using Solidity 0.7.2 or greater. See the solidity blog for more details about generated sources.

L’utilisation des sources générées facilitera l’audit de vos contrats. Lorsque l’option est cochée, vous pouvez accéder aux sorties du compilateur - pendant le débogage.

Ces sorties du compilateur apparaîtront dans un fichier .yul séparé dans l’éditeur Remix.

Navigation dans le débogueur

Slider et boutons

Curseur

En déplaçant le curseur, vous mettez en évidence le code correspondant dans l”Éditeur. Au niveau le plus granulaire, il fait défiler les opcodes d’une transaction (voir la section opcode ci-dessous). À chaque opcode, l’état de la transaction change et ces changements sont reflétés dans les panneaux du débogueur.

Enjamber le dossier

Ce bouton permet de passer à l’opcode précédent. Si l’étape précédente implique un appel de fonction, la fonction ne sera pas saisie.

Reculez

Ce bouton permet de revenir à l’opcode précédent.

Entrez dans

Ce bouton permet de passer à l’opcode suivant. Si la ligne suivante contient un appel de fonction, Step into passe à la fonction.

Avancez d’un pas

Ce bouton permet de passer à l’opcode suivant. Si l’étape suivante implique un appel de fonction, la fonction ne sera pas saisie.

Sauter au point d’arrêt précédent

Les points d’arrêt peuvent être placés dans la gouttière de l’éditeur. Si l’étape actuelle de l’appel a passé un point d’arrêt, ce bouton déplacera le curseur vers le dernier point d’arrêt passé.

Sauter

Lorsque vous êtes en communication et que vous cliquez sur ce bouton, le curseur est déplacé à la fin de la communication.

Sauter au point d’arrêt suivant

Si un point d’arrêt est avancé dans le code, ce bouton permet d’avancer jusqu’à ce point.

Les panneaux du débogueur

Pile de fonctions

La pile de fonctions répertorie les fonctions avec lesquelles la transaction interagit.

Solidité Locale

Les Solidity Locals sont les variables locales à l’intérieur d’une fonction.

État de Solidité

Il s’agit des variables d’état du contrat.

Opcodes

Ce panneau affiche le numéro d’étape et le opcode sur lequel le débogueur se trouve actuellement.

Lorsque vous faites glisser le slider (qui se trouve au-dessus des boutons de navigation), le numéro d’étape et l’opcode focalisés changent.

Détails des étapes

Détails de l’étape affiche plus d’informations sur l’étape de l’opcode.

Pile

Ce panneau présente la pile EVM.

Pour plus d’informations sur le site stack.

Mémoire

La mémoire est vidée à chaque nouvel appel de message. La mémoire est linéaire et peut être adressée au niveau de l’octet. Les lectures sont limitées à une largeur de 256 bits tandis que les écritures peuvent avoir une largeur de 8 bits ou de 256 bits.

Le panneau « Mémoire » se compose de 3 colonnes. Il se peut que vous deviez élargir un peu le panneau latéral de Remix pour que le formatage soit correct. (Faites glisser la bordure entre le panneau principal et le panneau latéral vers la droite).

La première colonne est l’emplacement dans la mémoire. La 2ème colonne est la valeur codée en hexadécimal. La troisième colonne est la valeur décodée. S’il n’y a rien, les points d’interrogation (?) s’affichent - comme ceci :

0x10: 00000000000000000000000000000000 ????????????????

Voici un exemple complet du panneau Mémoire,

Certains emplacements d’adresse ont des valeurs codées en hexadécimal et ces valeurs sont ensuite décodées. Par exemple, vérifiez les positions 0xa0 et 0x140.

Stockage

This is the persistent storage.

Pile d’appels

Tous les calculs sont effectués sur un tableau de données appelé pile d’appel. Il a une taille maximale de 1024 éléments et contient des mots de 256 bits.

Données d’appel

Les données d’appel contiennent les paramètres des fonctions.

Valeur de retour

Le fait référence à la valeur que la fonction renverra.

Changements dans le stockage complet

This shows the persistent storage at the end of the function.

Points d’arrêt

Des points d’arrêt peuvent être placés dans la gouttière de l’éditeur pour mettre le débogueur en pause.

Informations complémentaires

Les informations granulaires du débogueur donnent aux utilisateurs des informations détaillées sur ce qui se passe dans une transaction. Le débogueur n’est donc pas seulement utile pour le débogage, c’est aussi un excellent outil d’enseignement.

Pour en savoir plus sur l’utilisation du débogueur, consultez [Déboguer les transactions] (tutorial_debug.html).