12
votes

Obtenir une trace de pile à cordes complète, y compris l'exception interne

E.PrintStackTrace de Java () n'imprime pas tous les détails de la trace de la pile de l'exception interne.

Y a-t-il une méthode prête pour générer la trace de pile complète sous forme de chaîne? (en plus de le formater moi-même)

Modifier

Je viens de découvrir ce que PrintStackTrace () apparemment - apparemment les cadres de pile que les filtres sont exactement ceux communs à l'exception interne et à l'extérieur. Donc, en fait, c'est plutôt ce que je veux, et pas la trace de la pile «pleine».


3 commentaires

Comment voulez-vous dire la trace de la pile d'exception intérieure? Une exception attrapée est-elle propagée dans une autre exception?


Quelque chose qui produit par une prise ... jeter une nouvelle exception ("foo", e)


Je viens de découvrir ce qu'est-ce que PrintStackTrace (), apparemment, les trames de pile que les filtres sont exactement ceux communs à l'exception interne et à l'extérieur. Donc, en fait, c'est plutôt ce que je veux, et pas la trace de la pile «pleine».


3 Réponses :


9
votes

Je suggère que vous utilisiez le Exceptionnel classe de Apache Commons Lang, qui fournit une méthode utile pour cela.


2 commentaires

En fait, GetfullstackTrace () n'imprime toujours pas la trace de la pile intérieure.


Malheureusement, il n'y a pas de méthode impriméeLstackTrace (), mais vous pouvez faire système.err.println (getfletStackTrace ());



2
votes

Oui, vous pouvez utiliser la classe StackTraceElement renvoyée par jetonable.getstacktrace () et trouvez les détails.

de l'API:

Le dernier élément de la matrice (en supposant que la longueur de la matrice est non-zéro) représente le bas de la pile, qui est la première méthode Invocation dans la séquence.


0 commentaires

8
votes

J'ai fini par rouler le mien (j'ai pris la mise en œuvre de jetonable.PrintStackTrace () et a modifié un peu): xxx


2 commentaires

Avez-vous manqué d'imprimer une trace de pile pour une exception intérieure ici? if (e! = null) imprimante.println ("causé par: \ r \ n");


Quelque chose comme imprimante.println ("causé par: \ r \ n" + jointsacktrace (e)) ?