CodeGym /Cours /JAVA 25 SELF /Pile d’appels (Stack Trace)

Pile d’appels (Stack Trace)

JAVA 25 SELF
Niveau 11 , Leçon 5
Disponible

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.

1
Mission
JAVA 25 SELF, niveau 11, leçon 5
Bloqué
Calculateur culinaire et sa désagréable surprise 🥧
Calculateur culinaire et sa désagréable surprise 🥧
1
Mission
JAVA 25 SELF, niveau 11, leçon 5
Bloqué
Le héros et son artefact inexistant dans l'inventaire 🏹
Le héros et son artefact inexistant dans l'inventaire 🏹
1
Mission
JAVA 25 SELF, niveau 11, leçon 5
Bloqué
Détective du code : enquête sur la panne du système de rapports 📉
Détective du code : enquête sur la panne du système de rapports 📉
1
Mission
JAVA 25 SELF, niveau 11, leçon 5
Bloqué
Plongée profonde: analyse d'une défaillance dans un système multiniveaux 🪆
Plongée profonde: analyse d'une défaillance dans un système multiniveaux 🪆
1
Étude/Quiz
Exceptions, niveau 11, leçon 5
Indisponible
Exceptions
Exceptions
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION