Débogage avancé/La mémoire
Pile d'appels des fonctions
[modifier | modifier le wikicode]L'appel récursif de fonctions est devenu la norme dans les languages de programmation à partir de la fin des années 1950 avec Algol. Pour cela, il faut que l'exécution du programme utilise une zone de mémoire afin de pouvoir y accumuler les variables locales et les arguments d'un des appels d'une fonction particulière. Cette zone de mémoire est la pile d'exécution.
Lorsque l'on débogue un programme, pour pouvoir lire les variables locales, il faut savoir de quel appel, dans la pile d'appel, on souhaite lire les variables.
Les débogueurs comme GDB proposent donc lors d'un point d'arrêt de pouvoir remonter, ou descendre, dans la pile.
$ gdb ./programme
[... jusqu'à un arrêt de l'exécution ...]
(gdb) where # afficher la pile
(gdb) up # remonter dans la pile
(gdb) down # redescendre dans la pile
(gdb) finish # terminer l'appel courant et donc remonter dans la pile
Pour être précis, il y a une pile différente par thread (fil d'exécution). GDB permet aussi de passer de l'observation d'une pile à une autre dans un programme multithreadé parallèle.
$ gdb ./programme_multithreads
[... jusqu'à un arrêt de l'exécution ...]
(gdb) info threads # liste des threads
(gdb) thread 4 # observer la pile du thread 4
[... where, up, down, print, dans la pile 4 ...]
Allocation dynamique dans le tas
[modifier | modifier le wikicode]TODO
Observation du processus: activité et mémoire
[modifier | modifier le wikicode]TODO
Allocation dynamique dans la pile
[modifier | modifier le wikicode]TODO