Exception Java Stacktrace Pas L'Impression
J'ai le code suivant:
import org.apache.commons.lang.exception.ExceptionUtils;
public void myMethod() {
try {
//do something
} catch (Exception e) {
System.out.println(ExceptionUtils.getStackTrace(e)); //prints "java.lang.NullPointerException"
System.out.println(ExceptionUtils.getFullStackTrace(e)); //prints "java.lang.NullPointerException"
e.printStackTrace(); //prints "java.lang.NullPointerException"
}
}
Le résultat que j'aimerais voir, c'est plein stacktrace avec les numéros de ligne et la hiérarchie des classes qui a échoué. Par exemple,
Exception in thread "main" java.lang.NullPointerException
at org.Test.myMethod(Test.java:674)
at org.TestRunner.anotherMethod(TestRunner.java:505)
at java.util.ArrayList(ArrayList.java:405)
Ce code est exécuté à l'intérieur d'une plus grande application qui a également log4j, mais j'espère être en mesure d'obtenir l'exception dans une chaîne de caractères afin que je puisse l'envoyer sous forme de courriel pour les développeurs java.
Quelqu'un a une idée sur comment je peux capturer la trace de la pile d'une chaîne de caractères? Je ne peux pas utiliser Thread.currentThread().getStackTrace() depuis cette application fonctionne sur Java 4. Ce qui pourrait bloquer le code ci-dessus à partir de l'impression de la pleine stacktrace?
Non, rien ne doit être l'appel de setStackTrace.
Êtes-vous en mesure de débogage dans un IDE? Pourrait être utile de définir un point d'arrêt dans le bloc catch pour voir si l'Exception est "parfaitement formé".
ajouter le connecté la sortie de votre
myMethod()
ou de votre méthode. e.printStackTrace();
normalement devrait imprimer le remplissage de trace.OriginalL'auteur David | 2012-09-11
Vous devez vous connecter pour publier un commentaire.
L'exception peut-être attrapé et jeté quelque part avant de votre bloc catch. Peut-être dans une autre classe que vous appelez de faire de la logique.
Un
Exception
créé commenew Exception(new Throwable("java.lang.NullPointerException"));
impression sera quelque chose comme ce que vous voyez.
Je serais envisage sérieusement de passer à un autre produit. Délibérément la suppression de l'exception de l'information comme cela va à l'encontre du meilleur intérêt de leurs clients / utilisateurs. Trouver un autre fournisseur qui n'est pas de faire ce genre de merde chose.
OriginalL'auteur basiljames
c'est à cause de java n'code optimiziation lorsque vous exécutez en mode serveur (java server)
pour sauter cette étape. utilisation
-XX:-OmitStackTraceInFastThrow
en java argsvoir le lien ci-dessous pour plus de détails:
http://jawspeak.com/2010/05/26/hotspot-caused-exceptions-to-lose-their-stack-traces-in-production-and-the-fix/
Je suis d'accord que peut être fait quand vous possédez le code, si vous êtes dependenty sur quelqu'un d'autre, jusqu'à ce qu'ils fixent, c'est le meilleur que vous pourriez faire.
C'est certainement ce qui a causé le même problème pour moi, sur la Prod. Merci pour la réponse!
Pas de travail dans le JDK 8.
OriginalL'auteur vinesh
Si vous avez à plusieurs reprises lancer une exception, la JVM cesser de remplir dans la trace de la pile. Je ne suis pas sûr pourquoi, mais il peut être de réduire la charge sur la JVM. Vous devez être à la recherche lors d'une précédente trace de la pile pour voir les détails.
imprime
OriginalL'auteur Peter Lawrey
Vous pouvez utiliser le ci-dessous de manière(StringWriter.toString()) pour transférer la trace de la pile dans une Chaîne.
OriginalL'auteur Jaskey
Peut-être vous n'avez pas un appender pour la sortie de la console. Vous envisagez d'en ajouter un. Sinon, connectez-vous comme ENREGISTREUR.d'erreur(ex); avec log4j ou SLF4J
OriginalL'auteur Chris
Je ne peux que penser à 2 raisons pourquoi
e.printStackTrace()
peut-sortie de la chaîne de"java.lang.NullPointerException"
.setStackTrace(new StackTraceElement[0])
sur l'exception.printStackTrace()
ou une autre méthode pour renvoyer des informations trompeuses.OriginalL'auteur Stephen C
Assurez-vous que vous avez utilisé e.printStackTrace(), la place de l'e.getStackTrace();
OriginalL'auteur Spider