5.4 Contrôler l'exécution des fonctions

Il est toujours difficile de programmer sans fautes et programmer en Scilab n'échappe pas à cette fatalité. Plusieurs fonctions (ou fonctionalités) permettent d'aider à la détection des fautes et à leur correction. On peut interrompre l'exécution de code Scilab au moyen de la commande pause (du menu principal) ou de l'interruption Ctrl-C. Le prompt est alors différent pour signaler à l'utilisateur que l'interruption à eu lieu et à quel niveau d'interruption il se trouve. De même que l'exécution d'une fonction Scilab se fait dans un environnement local à la fonction, une pause à pour effet d'interrompre une exécution en cours et de relancer l'exécution de l'interprète dans un nouvel environnement local. Il faut considérer que les environnements d'exécution s'empilent. L'environnement courant est au sommet de la pile. Dans l'environnement au sommet de la pile on a accès (en lecture) aux variables des environnement précédents. l'interruption Ctrl-C arrête l'exécution en cours à un endroit non déterminé à l'avance, sachant que l'on peut alors contrôler ou l'on se trouve par la commande whereami (ou where). Il est cependant parfois préférable d'insérer explicitement la commande pause dans une fonction pour être sur de la position du point d'arrêt rajouté.


\begin{sessioncmd}
\par -->a=34;
-->function y=f(x) ; pause; a = %%pi; pause; y=...
...ée par la commande \verb+resume+}
a =
\par ! 1. 2. 3. 4. !
\par\end{sessioncmd}

Plutôt que de modifier le code d'une fonction en y insérant des pause ce qui nécessite le rechargement de la fonction dans l'environnement courant de Scilab. On peut utiliser la fonction setbpt pour fixer un point d'arrêt à une ligne donnée d'une fonction. On continue l'exécution interrompue au moyen de la commande resume. On peut aussi interrompre une exécution au moyen des commandes abort (resp. quit). On revient alors au niveau 0 - le bas de la pile d'exécution- (resp au niveau en ``dessous'' du sommet de la pile d'exécution, le sommet étant retiré de la pile).

On peut aussi exécuter pas à pas le contenu d'une fonction au moyen de la commande exec. Dans ce cas il n'y a pas d'environnement local d'exécution et il faut donc définir les argument de la fonction avant l'appel de exec


\begin{sessioncmd}
\par -->getf('stepf.sci','n'); \sleftarrow{\normalfont charge...
...= y+2,
y =
\par ! 3.8185949 6.5989062 2. 2.42336 !
return!
\par\end{sessioncmd}

Noter que par défaut on ne voit pas le source Scilab des instructions si le chargement de la fonction avec getf n'a pas été fait avec l'option 'n'.