J'ai récemment trouvé un bug qui provoque une NullPointerException. L'exception est interceptée et connecté à l'aide d'un slf4j déclaration. Abrégé de code ci-dessous:
for(Action action : actions.getActions()) {
try {
context = action.execute(context);
} catch (Exception e) {
logger.error("...", e);
break;
}
}
Comme vous pouvez le voir, rien de fantaisie. Cependant, de tous les enregistrement d'exception déclarations que nous avons, tout ce ne pas imprimer une trace de la pile. Tous les imprimés, c'est le message (représentés par des "...") et le nom de la classe exception (java.lang.NullPointerException).
Depuis la trace de la pile sur une exception est pas chargé, j'ai pensé que peut-être il y a une instruction de la réorganisation de problème de la sorte, et a décidé de faire appel e.getStackTrace() avant l'instruction de journal. Cela ne faisait aucune différence.
J'ai donc décidé de redémarrer avec le débogage de l'agent activé. Cependant, parce que j'ai même attaché au processus, j'ai remarqué que maintenant les traces de la pile ont l'impression. Donc clairement la présence de débogage de l'agent causé certaines des informations de débogage supplémentaires deviennent disponibles.
Depuis, j'ai ensuite fixé à la cause de l'exception. Mais je voudrais savoir pourquoi la trace de la pile n'était pas disponible sans un débogueur. Tout le monde sait?
Précisions: ce n'est pas un enregistrement d'émission. Imaginez la même try/catch de la clause, mais dans le catch, j'ai l'impression que la valeur de:
e.getStackTrace().length
Sans un débogueur cette affiche '0', avec un débogueur, il imprime un nombre positif (9 dans ce cas).
Plus d'infos: ce qui se passe sur JDK 1.6.0_13, 64bit, amd64 linux 2.6.9