Exécution pas à pas et mise au point d’un programme.

Retour à la page personnelle de Bernard Parisse.

## 18 Exécution pas à pas et mise au point d’un programme.

La commande `debug` permet de lancer un programme en mode d’exécution pas à pas. Elle ouvre une fenêtre permettant de diriger l’exécution du programme passé en argument. Par exemple, on entre le programme :

    carres(n):={
      local j,k;
      k:=0;
      for (j:=1;j<n+1;j++) {
        k:=k+j^2;
      }
      return k;
    }

On tape pour debugger le programme `carres` ci-dessus :

`debug(carres(5))`

cela ouvre la fenêtre du debugger. En cliquant sur le bouton `sst` on peut exécuter pas à pas le programme en visualisant l’évolution des valeurs des variables locales et des paramètres du programme. Cela permet de détecter la grande majorité des erreurs qui font qu’un programme ne fait pas ce que l’on souhaite. Pour des programmes plus longs, le debugger permet de controler assez finement l’exécution du programme en placant par exemple des points d’arrêt. Plus précisément, la fenêtre du debugger contient :

- un écran où se trouve le programme,
- une ligne de commandes repérée par `eval` dans laquelle on peut faire un calcul, écrire une commande `watch` par exemple ou modifier un paramètre,
- une ligne d’état, où est affiché le résultat de la dernière évaluation, le nom du programme debuggué, ses arguments, la liste des points d’arrêt et le numéro de la ligne exécutée,
- 7 boutons `sst dans cont tuer rmwtch voir break` :
  1. `sst` permet de passer à l’instruction suivante,
  2. `dans` permet d’entrer dans un sous-programme pour qu’il soit exécuté pas à pas,
  3. `cont` pour continuer l’exécution jusqu’au point d’arrêt suivant,
  4. `tuer` pour arrêter prématurément l’exécution du programme et donc fermer l’écran du debugger.
  5. `rmwatch` permet d’enlever une variable de la liste des variables affichées automatiquement (cf. `voir`)
  6. `voir` permet de demander l’affichage automatique du contenu de variables lors du déroulement du programme,
  7. `break` permet de marquer un point d’arrêt pour que l’exécution se fasse d’un seul coup jusqu’au point d’arrêt,
- un écran où va s’afficher les valeurs des variables locales et des paramètres (par défaut) ou les valeurs des variables que l’on a demandées de voir grâce au bouton `voir` ou à la commande `watch`,

Pour mettre au point un programme, on peut aussi utiliser la commande `print` qui permet de réaliser un affichage en cours de programmme. Cet affichage s’écrira alors en bleu. On tape par exemple dans un éditeur de programmes :

    carres(n):={
      local j;
      for (j:=1;j<n+1;j++) {
        print(j^2);
      }
      return n^2;
    }

Puis on compile ce programme en cliquant sur `OK`.

On tape ensuite dans une ligne de commandes : `carres(5)`
On obtient écrit en bleu dans la zone intermédiaire :
`1
4
9
16
25`
et dans la zone réponse, le résultat écrit en noir :
`25`

Cette méthode est toutefois plus rudimentaire que l’utilisation de la commande `debug` car il faut ajouter une commande print à chaque endroit du programme où on veut avoir un affichage, il faut recompiler le programme, et il n’est pas possible d’agir directement sur le déroulement du programme.

Retour à la page personnelle de Bernard Parisse.