print · rss · source

< Annexe D - Gérer les arguments sur la pile avec les Stack Frame | TutoOS | Annexe F - Booter avec Grub2 >


Déboguer le noyau avec gdb

Un noyau lancé avec bochs ou qemu peut être débogué très simplement avec gdb, et ce, sans manipulation très difficile. Cette annexe ne détaille pas les commandes de gdb mais résume seulement la manipulation permettant son utilisation.

Compiler avec l'option -g

Au préalable, comme pour tout binaire généré par gcc destiné a être débogué par gdb, le noyau doit avoir été compilé avec l'option -g.

Lancer l'émulateur

Il est possible d'utiliser bochs, mais il devra au préalable avoir été compilé avec l'option --enable-gdb-stub. A noter que cette option n'est pas compatible avec l'option --enable-debugger qui permet le mode debug. Celà nécessite donc d'avoir deux binaires bochs (avec par exemple un suffixe différent) : un pour le mode debug, un pour le mode gdb-stub.

Sinon, il est possible d'utiliser qemu. La commande suivante lance l'émulateur en lui précisant d'attendre un connection avec gdb pour démarrer le cpu :

qemu -hda c.img -s -S &

Utiliser gdb

Le débogueur a besoin des sources pour être vraiment effectif. Un methode simple est de le lancer directement à partir du répertoire contenant les sources :

$ cd kern/
$ gdb

Ensuite, il faut indiquer le port réseau fournissant les données à gdb. Par défaut, Qemu utilise le port 1234 :

> target remote localhost:1234

Il faut fournir en entrée un fichier contenant la table des symboles. Le noyau compilé avec l'option -g fait l'affaire :

> symbol-file kernel

Voilà ! Il est maintenant possible de déboguer le noyau avec gdb comme si il s'agissait d'un simple exécutable. On peut par exemple positionner un breakpoint au début de la fonction principale et continuer l'exécution de l'émulateur :

> b kmain
> c

< Annexe D - Gérer les arguments sur la pile avec les Stack Frame | TutoOS | Annexe F - Booter avec Grub2 >

print · rss · source
Page last modified on November 12, 2008, at 09:51 AM