Assurance qualité
Logicielle

Stack trace

Introduction

La stack trace est un morceau de texte qui est généralement affiché dans la console lorsqu'un programme rencontre une erreur durant son exécution. C'est la méthode utilisé par le langage de programmation pour communiquer l'endroit dans le code où l'erreur est survenu.

Avec la réutilisation de code, un morceau de code peut être utilisé à de nombreux endroits. La stack trace essaie donc d'indiquer le chemin pris par le code pour se rendre jusqu'au morceau de code fautif. Cette façon de faire est très utile quand on est habitué de voir des stack trace, mais assez complexe quand on ne programme pas depuis longtemps.

Format de la stack trace

En général, une stack trace aura un format similaire à ceci:

Stack trace

On note ici quelques détails que vous retrouverez toujours:

Nom de l'erreur ou exception
Nom qui est donné à l'erreur par le langage de programmation. Dépendant de l'erreur, le nom va changer. Avec l'expérience, on connait bien les noms utilisés et il devient facile de savoir pourquoi l'erreur est causé.
Description de l'erreur ou exeption
Description plus complète de l'erreur ainsi que pourquoi elle est survenu. On peut souvent y trouver des valeurs de variables ou des paramètres de fonction qui sont invalide, nous indiquant clairement ce qui s'est passé. Malheureusement, certains langage de programmation ou compilateurs n'ont pas de messages clairs, ce qui est un peu pénible à déboguer.
Nom de fonction et du fichier causant l'erreur
C'est littéralement le nom de la fonction dans laquelle l'erreur survient et le fichier qui contient cette fonction. Vous pouvez ainsi facilement trouver la source de l'erreur.
Numéro de ligne de l'erreur
La plupart des langages de programmation indiqueront aussi la ligne ou l'erreur est survenu. Certain langage indiqueront aussi le numéro de colonne (en caractères).

Vous remarquerez aussi une certaine répétition de la ligne indiquant l'emplacement de l'erreur. Ce n'est pas parce qu'il y a plusieurs erreurs, mais parce que la stack trace indique de où l'erreur est appelé. Par exemple, si l'erreur est survenu dans une fonction, appelé par une autre fonction, on verra la hierarchie de l'appel de ces 2 fonctions dans la stack trace.

Attention
Il est possible de voir certaines lignes de fonction que vous ne connaissez pas. C'est généralement le cas lorsque l'erreur survient dans une librairie de code que vous utilisez ou dans des fonctions appartenant au langage de programmation. Dans ce genre de cas, on doit simplement parcourir la stack trace pour trouver un fichier que nous connaissons pour identifier la source du problème.

Exemple

Voici un exemple simple de stack trace que nous allons pouvoir décortiquer:

Stack trace

En lisant la stack trace, on peut faire les conclusions suivante:

  1. Selon la stack trace, on voit que l'erreur est une erreur de format selon son nom. Selon sa description, on peut voir qu'une chaîne entrée "abc" n'a pas le bon format.
  2. L'endroit où l'erreur semble arrivé est dans System.Number qui est une classe de C#. On remonte donc la stack trace pour trouver où cette classe est appelé. On voit juste en dessous qu'elle est appelé de System.Int32.Parse qui est la fonction int.Parse de C#.
  3. La fonction int.Parse semble être appelé d'une fonction DemandeEntree() qui se trouve dans une classe Program dans un fichier Program.cs. La ligne de l'appel est la ligne 16.

En résumé, on en conclu que le programme plante parce qu'il essaie de convertir la chaîne "abc" en un nombre entier à la ligne 16 du fichier Program.cs dans la fonction DemandeEntree(). Il faudrait donc investiguer pourquoi la chaîne "abc" a été passé et empêcher que cela se reproduise.