¿Cómo hago en java agregar un stacktrace a mi la depuración de impresión
Pregunta
¿Cuál es la forma más fácil de imprimir un stacktrace de depuración de una impresión?A menudo, durante las pruebas que te gustaría conocer la pila de llamadas que condujeron a la situación provocando un mensaje de depuración.
Solución
Otros consejos
Si usted está usando log4j
Exception e = new Exception();
log.error("error here", e);
se imprimirá el stacktrace para su registro.
Si desea guardar la traza de la pila en una Cadena, se puede hacer esto;
String exception = "";
for (StackTraceElement element : e.getStackTrace())
exception += element.toString() + "\n";
Donde e es, obviamente, una excepción.
Además, suena muy raro para autogenerar una Excepción sólo para encontrar a obtener una traza de la pila para una depuración.Obtener Eclipse y utilizar el modo de depuración, es realmente impresionante.
Sólo la creación de un arbitrario excepción hace el truco para mí:
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
Así como lo @jjnguy dijo, si usted no tiene una excepción, también puedes llamar al Hilo.getStackTrace().
Debe ser la captura de la excepción en un bloque try-catch.
e.getStackTrace();
Que devuelve StackTraceElement[] que se puede interpretar.
También:
e.printStackTrace()
se...imprimir el stacktrace.
Simplemente imprimir la actual traza de la pila a stderr, usted puede llamar a:
Thread.dumpStack();
lo que sí llama:
new Exception("Stack trace").printStackTrace();
A la salida de stdout en lugar de stderr, pasar System.out
a printStackTrace()
:
new Exception("Stack trace").printStackTrace(System.out);
Sólo porque me necesitaba a mí mismo:
Como inspirados por la respuesta ¿Cómo puedo encontrar el autor de la llamada de un método que utiliza stacktrace o reflexión? se puede recuperar la pila de llamadas utilizando
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
Entonces el proceso de impresión y/registro de lo que usted está interesado en.Más trabajo que el uso de Thread.dumpStack()
, pero más flexibles.