Trace d'appels
En informatique, une trace d'appels (trace de pile[1], stack trace, stack backtrace[2] ou encore stack traceback[3] en anglais) est la représentation des piles d'exécution à un moment donné lors de l'exécution d'un programme informatique.
Les développeurs utilisent couramment les traces d'appel lors de séances de débogage interactives ou post mortem. Les utilisateurs finaux peuvent parfois voir des traces d'appels affichées avec un message d'erreur, que l'utilisateur peut alors rapporter aux développeurs.
Une trace d'appels remonte la séquence d'appels de fonctions - jusqu'au point où la trace d'appels est générée. Dans un scénario post-mortem, cela remonte jusqu'à la fonction où l'erreur a eu lieu (mais qui ne l'a pas nécessairement provoquée). Les appels de fonctions « frères » (exécutés et terminés avant la fonction courante) n'apparaissent pas dans une trace d'appels.
Par exemple, le programme Python suivant contient une erreur :
def a():
b()
def b():
c()
def c():
erreur()
a()
Exécuter ce programme avec l'interpréteur standard Python produit le message d'erreur suivant :
Traceback (most recent call last): File "tb.py", line 10, in <module> a() File "tb.py", line 2, in a b() File "tb.py", line 5, in b c() File "tb.py", line 8, in c erreur() NameError: global name 'erreur' is not defined
La trace d'appels montre oĂą l'erreur a eu lieu, c'est-Ă -dire dans la fonction c
. Elle montre aussi que la fonction c
a été appelée par b
, qui a été appelée par a
, qui a finalement été appelée par le code à la ligne 10 (la dernière ligne) du programme.
Implémentation par les langages
La plupart des langages de programmation, y compris Java et C#, permettent nativement de récupérer la trace d'appels courante par des fonctions propres au langage. C++ ne permet pas de la récupérer nativement, mais les utilisateurs de C++ peuvent récupérer la trace d'appels avec la bibliothèque stacktrace par exemple. En JavaScript, les exceptions contiennent la trace d'appels d'où l'exception a été lancée.
Références
- « Utilisation des fichiers journaux de LiveCycle ES2 et du serveur d'applications », adobe.com (consulté le )
- (en) « libc manual: backtraces », gnu.org (consulté le )
- (en) « traceback — Print or retrieve a stack traceback », python.org (consulté le )
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Stack trace » (voir la liste des auteurs).