working ver sirve que para oxygen online not intellij how funciona debugger debuggear debug como breakpoint java debugging

ver - java debugger online



¿Cómo en Java agrego una stacktrace a mi impresión de depuración? (8)

¿Cuál es la forma más fácil de imprimir un stacktrace desde una impresión de depuración? A menudo, durante la prueba, le gustaría saber la pila de llamadas que conduce a la situación que provoca un mensaje de depuración.


Además de lo que dijo @jjnguy, si no tienes una excepción, también puedes llamar a Thread.getStackTrace ().


Debería atrapar la excepción en un bloque try-catch.

e.getStackTrace();

Eso devuelve StackTraceElement [] que luego puede interpretar.

También:

e.printStackTrace()

va a ... imprimir la stacktrace.


Solo crear una excepción arbitraria me funciona:

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



Si desea guardar el seguimiento de la pila en una Cadena, puede hacerlo;

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

Donde e es, obviamente, una excepción.

Además, suena muy extraño generar automáticamente una Excepción propia para encontrar obtener un seguimiento de pila para una depuración. Obtenga Eclipse y use su modo de depuración, es realmente increíble.


Si estás usando log4j

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

imprimirá stacktrace en su registro.


Para imprimir simplemente el trazo de la pila actual a stderr, puede llamar a:

Thread.dumpStack();

que a su vez solo llama:

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

Para enviar a stdout en lugar de stderr, pase System.out a printStackTrace() :

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


Solo porque lo necesitaba yo mismo:

Según lo inspirado por la respuesta ¿Cómo encuentro al llamante de un método que usa stacktrace o reflection? , puedes recuperar la pila de llamadas usando

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

Luego procesa e imprime / registra lo que le interesa. Más trabajo que usar Thread.dumpStack() , pero más flexible.