Aller au contenu

Débogage avancé/La mémoire

Leçons de niveau 17
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
La mémoire
Icône de la faculté
Chapitre no 2
Leçon : Débogage avancé
Chap. préc. :Débogage avancé/Outils d'aide au débogage et fondamentaux
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Débogage avancé : La mémoire
Débogage avancé/La mémoire
 », n'a pu être restituée correctement ci-dessus.

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