Il est très informatif d'avoir en cas de problème la pile d'appel lié à une exception. En java elle est particulièrement détaillée et permet de repérer rapidement la source du bug. Par contre il est tout aussi interressant de l'avoir en cas de fonctionnement normal, pour savoir par exemple quel est l'origine d'un appel à une méthode qui est appelée par un grand nombre d'autres méthodes. Vous allez me dire, qu'il suffit de poser un point d'arrêt et le tour est joué....sauf que cela n'est pas toujours possible.
Voici une technique pour s'en passer. Elle se base sur le fait que la classe "Exception" a pour ancêtre "Throwable" qui n'est pas encore une exception, mais qui a le mérite de fournir toutes les informations nécessaires concernant la pile d'appel.
Voici un exemple simple :
public class Pile {
private static void appel2(){
Throwable th=new Throwable();
th.printStackTrace();
}
private static void appel1(){
appel2();
}
public static void main(String[] args) {
appel1();
}
}
qui retourne comme résultat :
java.lang.Throwable
at Pile.appel2(Pile.java:5)
at Pile.appel1(Pile.java:10)
at Pile.main(Pile.java:14)
La méthode "printStackTrace()" est un affichage préformaté sur la console des informations de la pile d'appel. On peut bien sur récupérer auprès de l'objet "th" toutes les informations séparément.
