Portail / Le langage Vala(Sommaire)

Mise au point d'un programme Vala.

Mise à jour du 13/05/2022.

Le langage Vala est trop récent pour qu'un IDE comme GNOME Builder prenne en compte tous les aspects du développement et des tests. Un point faible et pourtant fondamental est la mise au point (debug).

Il ne faut pas perdre de vue que Vala génère du code C qui est ensuite à son tour compilé. Cela signifie que les outils de mise au point sont les mêmes que ceux des programmes C. En ligne de commande, on a le programme gdb dont l'approche peut être facilité via une interface graphique comme nemiver.

Pour mettre au point un programme sous une forme un peu plus évoluée que celle du langage assembleur et de l'observation de l'état des registres, il faut inclure dans le code exécutable des informations de mise au point. c'est le rôle de l'option -g de valac.

Exemple de mise en œuvre.

Nous allons créer un programme qui invoque l'attribut d'un instance de classe égale à un objet nul. Cela va provoquer un plantage de l'application :

class Foo : Object {
    public int field;
}

void main() {
    Foo? foo = null;
    stdout.printf("%d\n", foo.field);
}

Le fichier qui contient ce code source est appelé bug.vala. Pour pouvoir le mettre au point, nous devons le générer avec l'option -g afin d'y intégrer des information qui permettent de faire le line avec le fichier source. La bonne nouvelle, c'est que gdb est capable de suivre un fichier source en langage Vala. Voici la commande qui permet de générer l'exécutable avec les informations de mise au point :

valac -g --save-temps bug.vala

Cela va produire le fichier exécutable bug. Pour le mettre au point en ligne de commande tapez

gdb bug

Après avoir tapé cette commande et exécuté la commande run, la cosole affiche :

Starting program: bug
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
0x000055555555535a in _vala_main () at bug.vala:7
7           stdout.printf("%d\n", foo.field);

gdb met en évidence la ligne à l'origine du plantage et en rappelle même le code source.

En mode graphique, c'est encore plus intuitif, tapez la commande :

nemiver bug

Le code source Vala s'affiche avec un point d'arrêt sur la première ligne.

Rédaction par Jean-Marie Piatte (1983-2021)