< Annexe D - Gérer les arguments sur la pile avec les Stack Frame | TutoOS | Annexe F - Booter avec Grub2 >
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.
-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
.
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 &
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 >