1. Introduction
Stack Trace (pile d’appels) — liste des méthodes qui ont été appelées dans votre programme jusqu’au moment où l’erreur (exception) s’est produite. Lorsqu’une exception survient, Java affiche automatiquement la trace de pile à l’écran. C’est comme des « traces dans la neige » : vous voyez par quelles étapes le programme est arrivé à l’erreur.
Analogie :
Imaginez que vous avancez dans un labyrinthe et que vous vous heurtez soudain à un mur. Le stack trace est une carte qui montre par quels couloirs vous avez marché avant de vous perdre.
À quoi ressemble un Stack Trace ?
Quand une erreur se produit dans le programme, Java affiche un message de ce type :
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.divide(Main.java:10)
at Main.main(Main.java:5)
Que voit-on ici ?
- Exception in thread "main" — indique dans quel thread l’erreur s’est produite (généralement "main").
- java.lang.ArithmeticException: / by zero — le type d’exception et son message.
- at Main.divide(Main.java:10) — la méthode divide dans la classe Main, ligne 10.
- at Main.main(Main.java:5) — la méthode main dans la classe Main, ligne 5.
Chaque ligne at ... est une étape dans la pile d’appels. La ligne la plus haute est l’endroit où l’erreur s’est produite. En dessous se trouvent les méthodes qui ont appelé cette méthode, et ainsi de suite jusqu’au tout début du programme.
2. Comment lire un Stack Trace ?
Étape 1. Trouvez le type d’exception et le message
La première ligne contient toujours le type d’erreur et sa description :
java.lang.ArithmeticException: / by zero
C’est déjà un indice : l’erreur est liée à une division par zéro.
Étape 2. Regardez la première ligne « at ... »
C’est l’endroit où l’erreur s’est effectivement produite :
at Main.divide(Main.java:10)
Donc, l’erreur a eu lieu dans la méthode divide de la classe Main à la ligne 10.
Étape 3. Remontez la pile
La ligne suivante montre qui a appelé cette méthode :
at Main.main(Main.java:5)
Donc, la méthode main a appelé divide, et l’erreur est « remontée » vers le haut. Le numéro de ligne — 5.
Étape 4. Repérez vos propres classes
Dans une trace de pile longue, on trouve souvent des méthodes système (par exemple, issues des packages java.util, java.io).
Vos classes sont généralement plus proches du début de la liste. Regardez les noms de classes et de fichiers — cherchez les vôtres !
3. Exemple : analyse d’un Stack Trace réel
Code :
public class Main
{
public static void main(String[] args)
{
int result = divide(10, 0);
System.out.println("Résultat: " + result);
}
public static int divide(int a, int b)
{
return a / b;
}
}
Erreur :
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.divide(Main.java:8)
at Main.main(Main.java:3)
Analysons :
- Erreur : division par zéro (ArithmeticException).
- S’est produite dans la méthode divide à la ligne 8.
- Appelée depuis la méthode main à la ligne 3.
Que faire ?
Ouvrez le fichier Main.java, allez à la ligne 8 — vous y trouverez la division par zéro. Corrigez !
4. Stack Trace avec plusieurs méthodes
Code :
public class Main
{
public static void main(String[] args)
{
process();
}
public static void process()
{
calculate();
}
public static void calculate()
{
int[] arr = {1, 2, 3};
System.out.println(arr[10]); // Erreur!
}
}
Erreur :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 3
at Main.calculate(Main.java:11)
at Main.process(Main.java:7)
at Main.main(Main.java:3)
Analysons :
- Erreur : dépassement des limites du tableau (ArrayIndexOutOfBoundsException).
- S’est produite dans calculate (ligne 11).
- Appelée depuis process (ligne 7).
- Appelée depuis main (ligne 3).
Conclusion :
Le stack trace montre tout le chemin par lequel le programme est arrivé à l’erreur.
5. Erreurs courantes lors de l’utilisation d’un Stack Trace
Erreur n° 1 : ignorer le Stack Trace.
Les débutants regardent souvent seulement « l’erreur en rouge » et ne lisent pas la trace de pile. Ne faites pas ça ! Stack trace — c’est un indice indiquant où chercher le bogue.
Erreur n° 2 : confondre la ligne du message d’erreur et la ligne où l’erreur s’est produite.
Important : la première ligne contient le type d’erreur, et l’emplacement de l’erreur se trouve sur la première ligne at ....
Erreur n° 3 : chercher l’erreur dans les classes système.
Si vous voyez des lignes du type at java.base/java.util.Scanner.nextInt(Scanner.java:123), ne vous précipitez pas dans les sources de Java. Regardez qui a appelé cette méthode dans votre code.
Erreur n° 4 : ne pas utiliser les numéros de ligne.
Le numéro de ligne est votre meilleur allié. Ouvrez le fichier, trouvez la ligne indiquée — et vous verrez l’erreur.
Erreur n° 5 : ne pas comprendre qu’un Stack Trace est un « chemin ».
Le stack trace montre comment le programme est arrivé à l’erreur. Parfois, le bogue n’est pas dans la toute première ligne, mais dans la façon dont vous avez appelé la méthode.
GO TO FULL VERSION