Trace d'appels

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher

En informatique, une trace d'appels (stack trace, stack backtrace[1] ou encore stack traceback[2] 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
    error()
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 fonction 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) of the program.

Implémentation par les langages[modifier | modifier le code]

La plupart des langages de programmation, y compris Java et C#, permettent nativement de recuperer 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.

Voir aussi[modifier | modifier le code]

Références[modifier | modifier le code]

  1. « libc manual: backtraces », gnu.org (consulté le 8 juillet 2014)
  2. « traceback — Print or retrieve a stack traceback », python.org (consulté le 8 juillet 2014)