# Introduction

Ce didacticiel est destiné aux nouveaux utilisateurs de la Simple Virtual Machine.

Dans ce didacticiel, vous allez exécuter une application Simple Virtual Machine en utilisant le débugueur. L'application vous est donnée.

Le temps de lecture de ce didacticiel est estimé à 15 minutes si le didacticiel numéro 1 a été lu auparavant.

# Mise en place

Pour ce didacticiel, l'application utilisée est celle du didacticiel numéro 1. Référez-vous au didacticiel numéro 1 pour la mise en place de celui-ci.

# Lancement de l'application en mode debug

Pour lancer la machine virtuelle en mode debug, il suffit de lancer l'application en ajoutant l'option `-d` suivi d'un numéro de port TCP.

    ./application.svm -d 8080 5

Si la machine virtuelle ne rend pas la main, c'est que l'invocation a réussi. En effet, comme nous allons le voir bientôt, l'application contient un point d'arrêt. Cela nous permettra de voir la machine en fonctionnement.

Si une erreur est affichée, et que la machine indique qu'elle n'a pas pu lancer le débugueur, testez avec un autre port jusqu'à ce que la machine ne rende pas la main.

# Le débugueur

Pour ouvrir le débugueur, utilisez un navigateur web (normalement, Firefox et Chrome sont supportés) sur le même système et dans une nouvelle page ou tab, lancez :

    http://localhost:8080

Si vous avez utilisé un autre port, adaptez l'URL. En revanche, la machine n'acceptera pas de connexion depuis un autre système pour cette application.

## Ouvrir le débugueur

Lorsque la page s'ouvre, une boite de dialogue attend le "login" :

Login
Login
Send

Le "login" se trouve sur le terminal où a été lancée la machine virtuelle. Il faut copier/coller le login dans la boite de login du débugueur. Sur chaque boite de dialogue, le bouton "?" permet d'ouvrir une aide contextuelle, rappellant ici comment trouver le "login".

Une fois le bon "login" entré dans la boite de login, le débugueur s'ouvre. Dans le cas contraire, l'interface se bloque pour prévenir toute nouvelle tentative, et il faut recharger la page pour recommencer du début la phase d'authentification.

## Le menu principal

Lorsque l'interface du débugueur s'ouvre, le menu principal est automatiquement présenté à l'utilisateur :

Test

Dans ce menu,

- l'entrée "Breakpoints" donne accès aux points d'arrêt rencontrés par la machine durant l'exécution de l'application,
- l'entrée "Windows list" donne accès à la gestion des différentes fenêtres de l'interface. L'aide de la boite de dialogue gérant les fenêtres contient l'aide générale sur le fonctionnement de l'interface,
- les autres entrées donnent accès aux différents éléments de la machine en cours d'exécution.

## Les points d'arrêt

Dans notre cas, la machine est arrêtée sur un point d'arrêt placé dans le code de l'application. Cliquez sur "Breakpoints" pour ouvrir la liste des points d'arrêt :

Test
Breakpoint list

    Breakpoint:
    At <main:1/0>

Un seul point d'arrêt est ici disponible.

Plusieurs types de points d'arrêt existent. Ici, il s'agit du point d'arrêt le plus simple.

## Le contexte d'exécution

Cliquez :

1. sur ">" pour ouvrir le contexte dans lequel s'est arrêtée la machine,
2. dans la fenêtre qui vient de s'ouvrir, cliquez sur "Memory" pour ouvrir la mémoire,
3. dans la même fenêtre, cliquez sur "Processor" pour ouvrir le processeur,
4. enfin, dans la fenêtre du processeur, cliquez sur "Code" pour ouvrir le code.

En déplaçant un peu les fenêtres, cela donne :

Test
Breakpoint list

    Breakpoint:
    At <main:1/0>

Kernel main - P application
State: D, transmit_interruption
Processor
Memory
Processor - K main - P application
State:
Next instruction: <main:1/1>
Current instruction: <main:1/0>
Code
Current memory: &0*0
Allocated memory:
Defined aliases:
Local interruptions:
Cascaded local interruptions:
Flags:
Cascaded flags:
Return stack:
Global interruptions:
Waiting interruptions:
Memory - K main - P application

Address | Type | Value
--- | --- | ---
&0 | INT | 5

Alias | Pointer
--- | ---
nb | &0*1

Address:
Display
Aliases
P
Focus
Back
Clear
Code main - K main - P application

    :debug BREAK
    :memory INT/i , INT/s
    0 -> &i
    0 -> &s
    :label loop
    :shift &i
    :shift @&i &s
    :goto loop :when @&i IN &0*@&nb
    :com.message @&s

Auto-scroll to
Current
with
above
Display

Le débugueur est maintenant ouvert, et l'exécution de l'application peut maintenant être observée.

# Exécution de l'application

Dans la partie haute de la fenêtre du processeur se trouvent quatre boutons permettant de contrôler l'exécution de l'application.

Utilisez le bouton ">." pour faire avancer l'exécution de l'application pas-à-pas, et pour chaque étape, observez à la fois dans le navigateur et le terminal ce qui change. Pour lancer l'exécution jusqu'à la fin du programme d'un seul coup, il suffira de cliquer une fois sur le bouton ">>" de la fenêtre processeur.

Il est possible qu'un utilisateur découvrant la machine virtuelle ne cerne pas le déroulement de l'application, mais cela n'est pas requis à ce stade de la lecture des didacticiels. Les didacticiels suivants ont pour vocation d'expliquer pas-à-pas tous les concepts visibles dans le débugueur.

Un utilisateur confirmé peut avec le débugueur comprendre en détail ce que fait le code de l'application, et éventuellement le corriger.

# Conclusion

Vous venez de voir sur un exemple d'application simple :

- comment lancer la machine virtuelle en mode debug : le lancement du débugueur est effectué grâce à une option à passer à la machine en lançant l'application,
- comment l'utilisateur peut voir et interagir avec une machine virtuelle en fonctionnement : l'interface du débugueur essaye de simplifier l'accès aux données essentielles de l'application en cours d'exécution.

Le débugueur a trois objectifs :

- assister un utilisateur débutant dans sa formation à l'écriture d'applications avec la Simple Virtual Machine, en lui montrant en détail tout ce qui se passe au sein de l'application,
- permettre à un utilisateur confirmé de détecter où se situe d'éventuelles erreurs dans son application et de pouvoir y remédier,
- aider un utilisateur avancé à enrichir l'architecture de la machine virtuelle au travers d'extensions.