Comment puis-je en java ajouter une stacktrace à mon impression de débogage

StackOverflow https://stackoverflow.com/questions/54882

  •  09-06-2019
  •  | 
  •  

Question

Quelle est la façon la plus simple pour imprimer une stacktrace de débogage imprimé?Souvent, pendant les tests, vous souhaitez connaître la pile des appels qui ont précédé la situation en provoquant un message de débogage.

Était-ce utile?

Autres conseils

Si vous êtes à l'aide de log4j

Exception e = new Exception();
log.error("error here", e);

imprime la stacktrace à votre journal.

Si vous souhaitez enregistrer la trace de la pile en une Chaîne de caractères, vous pouvez le faire;

String exception = "";
for (StackTraceElement element : e.getStackTrace())
   exception += element.toString() + "\n";

Où e est, évidemment, une exception.

En outre, il semble très étrange pour générer automatiquement une Exception juste pour trouver une trace de la pile pour un débogage.Obtenez de l'Éclipse et de l'utiliser le mode debug, c'est vraiment génial.

Juste la création d'un arbitraire exception fait le truc pour moi:

System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();

Ainsi que @jjnguy dit, si vous n'avez pas une exception, vous pouvez également appeler le Thread.getStackTrace().

Vous devriez être en rattrapage de l'exception dans un bloc try-catch.

e.getStackTrace();

Qui renvoie StackTraceElement[] vous pouvez ensuite les interpréter.

Aussi:

e.printStackTrace()

va...imprimer le stacktrace.

Pour imprimer simplement le courant trace de la pile vers stderr, vous pouvez appeler:

Thread.dumpStack();

qui lui-même appelle simplement:

new Exception("Stack trace").printStackTrace();

À la sortie stdout plutôt que de stderr, passer System.out pour printStackTrace():

new Exception("Stack trace").printStackTrace(System.out);

Juste parce que j'en avais besoin moi-même:

Inspiré de réponse Comment puis-je trouver de l'appelant d'une méthode à l'aide de stacktrace ou de réflexion? vous pouvez récupérer la pile d'appel à l'aide

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

Ensuite, vous le traitement et l'impression/journal de ce que vous êtes intéressé dans.Plus de travail que d'utiliser Thread.dumpStack(), mais plus flexible.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top