đ”ïžââïž Trace dâexĂ©cution
Lorsqu'on a un morceau de code, on peut souhaiter savoir dans quel ordre les instructions sont exécutées.
Principeâ
On veut accomplir 2 éléments principaux :
- Indiquer quelles lignes de code s'exécutent dans quel ordre.
- Indiquer les effets de chaque ligne de code.
- Indiquer la pile d'appels (si on a des fonctions).
- Exemple simple
- Avec boucle
- Avec fonction
- Valider une trace
Dans le cas d'une séquence d'instructions, on peut voir que les instructions sont exécutées dans l'ordre de lecture du code. Simple!
On voit que :
- On indique seulement les lignes qui s'exécutent en vrai.
- Certaines lignes s'exécutent plusieurs fois, c'est le principe de la boucle!
- On appelle ce cheminement le flot de contrĂŽle.
Codeâ
Si on a le code suivant :
def carre(n):
return n * n
def somme_carres(x, y):
return carre(x) + carre(y)
def affiche_resultat():
a = 2
b = 3
total = somme_carres(a, b)
print(f'La somme des carrés est : {total}')
affiche_resultat()
Traceâ
On indique aussi la pile d'appels, c'est-à -dire les fonctions en cours d'exécution (3e colonne).
Ce genre de code fait souvent appel à plusieurs appels de fonctions imbriqués.
On peut donc visualiser la pile d'appels comme un empilement temporaire : chaque appel sâajoute en haut de la pile, et disparaĂźt dĂšs quâil est terminĂ©.
# ligne | a | b | x | y | n | total | affichage | pile d'appels | fonction appelée | valeur retournée |
---|---|---|---|---|---|---|---|---|---|---|
13 | __main__ | affiche_resultat() | ||||||||
8 | 2 | affiche_resultat __main__ | ||||||||
9 | 2 | 3 | affiche_resultat __main__ | |||||||
10 | 2 | 3 | affiche_resultat __main__ | somme_carres(2, 3) | ||||||
5 | 2 | 3 | somme_carres affiche_resultat __main__ | carre(2) | ||||||
2 | 2 | carre somme_carres affiche_resultat __main__ | 4 | |||||||
5 | 2 | 3 | somme_carres affiche_resultat __main__ | carre(3) | ||||||
2 | 3 | carre somme_carres affiche_resultat __main__ | 9 | |||||||
5 | 2 | 3 | somme_carres affiche_resultat __main__ | 13 | ||||||
10 | 2 | 3 | 13 | affiche_resultat __main__ | ||||||
11 | 2 | 3 | 13 | La somme des carrés est : 13 | affiche_resultat __main__ |
Afin de valider une trace :
- Placer un point d'arrĂȘt sur la premiĂšre ligne qui s'exĂ©cute.
- Lancer l'exécution en mode débogage.
- Sauter de ligne en ligne pour voir si la trace est correcte.
Si on se rend à la fin de l'exécution et que toutes tes valeurs étaient bonnes, on a bien compris ce que fait le code.