Evolution #131

Créer un debugger scripting

Ajouté par Kredh * il y a environ 3 ans.

Statut:Nouveau Début:12/09/2015
Priorité:Normal Echéance:
Assigné à:- % réalisé:

0%

Catégorie:- Temps passé: -
Version cible:-

Description

Un debuggeur de script dans Tsunami

Quand on crée un script, surtout quand il atteint une certaine taille, on se pose souvent les questions suivantes :

  • Quelles lignes ou conditions s'exécutent en particulier ?
  • Que vaut une variable à un moment précis ?
  • Que vaut une mémoire spécifique à un moment précis ?

Pour le moment, on répond à ces questions soit en utilisant la bonne vieille logique de conception, soit en utilisant du code de debug encombrant et peu clair, sans parler de son efficacité.

Je propose à la place de créer un système de débuggeur intégré au MUD et permettant d'obtenir ces informations en temps réel. Cette description sera modifiée au fur et à mesure que de nouvelles idées seront proposées.

Mode debug

Pour chaque script ou bloc, dans l'éditeur de script, on devrait pouvoir passer en mode debug grâce à une option (probablement /g). Dans ce mode :

  • Quand le script s'exécute, il fait une pause entre chaque ligne ;
  • Le système demande à celui qui debug d'appuyer sur ENTRÉE pour passer à la ligne suivante, ou interroger certains éléments du script, comme la valeur des variables ;
  • Seules les lignes exécutées s'affichent bel et bien. Les conditions fausses sont ignorées.

Voir l'exenple ci-dessous pour un exemple de debug.

Connaître la valeur d'une variable

Pour connaître la valeur d'une variable à un moment, il suffira d'entrer son nom.

Par exemple :

Débuggeur actif :

  1  ecrire_memoire salle "nom" valeur

(ENTRÉE pour continuer l'exécution)

-> valeur
valeur = 5
-> salle
salle = <Salle 'depart:8'>
-> 

Connaître la valeur d'une mémoire

On pourra utiliser la syntaxe variable.nom pour connaître la valeur d'une mémoire. Par exemple :

Débuggeur actif :

  1  ecrire_memoire salle "nom" valeur

(ENTRÉE pour continuer l'exécution)

-> salle.nom
Cette mémoire n'existe pas.
-> (ENTRÉE)

  2  poser salle "pomme_rouge" 1

(ENTRÉE pour continuer l'exécution)

-> salle.nom
Mémoire = 5
-> 

Notez bien qu'avant que la ligne 1 ne s'exécute, la mémoire n'existe pas. Il faut attendre la ligne 2 pour que la mémoire existe bien.

Exécuter des instructions supplémentaires

Il faudrait aussi pouvoir exécuter de véritables instructions, et si besoin les ajouter au script. Il reste encore à voir comment.

Exemple de débuggeur

Voici un exemple illustrant l'utilisation du debuggeur tel qu'imaginé ici. Les commandes entrées se trouvent après le prompt usuel ->. Quand il est écrit ENTRÉE entre parenthèses, cela signifie la touche ENTRÉE, pas une commande.

Débuggeur actif :

  1  si peut_faire(personnage, "cle de qu6ete", "1"):

(ENTRÉE pour continuer l'exécution)

-> personnage
personnage = <Joueur 'Kredh'>
-> peut_faire(personnage, "cle de qu6ete", "1")
VRAI
-> (ENTRÉE)

  2    dire personnage "Parfait !" 

(ENTRÉE pour continuer l'exécution)

-> (ENTRÉE)
Parfait !

   6 (Fin du script)

-> 

Le script était le suivant :

  1  si peut_faire(personnage, "cle de qu6ete", "1"):
  2    dire personnage "Parfait !" 
  3  sinon:
  4    dire personnage "Tant pis" 
  5  finsi

Comme vous le voyez, seules la ligne 1 et 2 sont exécutées dans ce cas, car la condition est vérifiée. Le debuggeur passe directement de la ligne 2 à la ligne 6 (fin du script). Vous pouvez toujours utiliser le debuggeur quand le script est fini, histoire de voir par exemple la valeur des variables après exécution.

Formats disponibles : Atom PDF