¿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.¿Cómo en Java agrego un stacktrace a mi impresión de depuración?
Respuesta
Debería atrapar la excepción en un bloque try-catch.
e.getStackTrace();
Devuelve StackTraceElement [] que luego puede interpretar.
también:
e.printStackTrace()
se ... imprimir el StackTrace.
Sólo la creación de una excepción arbitraria hace el truco para mí:
System.out.println("Oops, the bad thing happened");
new IllegalStateException().printStackTrace();
Deberías jus t use Thread.getStackTrace(). – jjnguy
Creo que este método causará una advertencia en algunos IDEs, como IntelliJ, porque está creando una excepción pero no la está lanzando. Recomiendo el método Thread.getStackTrace() que tiene la misma lógica pero está oculto para el desarrollador. –
Thread.dumpStack() es más fácil si solo desea enviarlo a stderr (ahorra tener que recorrer los elementos de traza de la pila). –
Así como lo @jjnguy Dicho esto, si usted no tiene una excepción, también se puede marcar Thread.getStackTrace().
Si desea guardar el seguimiento de la pila en una cadena que 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 extraño generar automáticamente una excepción propia solo 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 utiliza log4j
Exception e = new Exception();
log.error("error here", e);
imprimirá la StackTrace a su registro.
+1 por no usar stdout/stderr –
El hecho de que lo necesitaba a mí mismo:.
Como se inspira en respuesta How do I find the caller of a method using stacktrace or reflection?, se puede recuperar la pila de llamadas usando
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
A continuación, procesar e imprimir/log lo que está interesado en trabajar más que usar Thread.dumpStack()
, pero más flexible.
Para imprimir simplemente el seguimiento de la pila actual en stderr, puede llamar a:
Thread.dumpStack();
que a su vez sólo llama:
new Exception("Stack trace").printStackTrace();
Para dar salida a stdout en lugar de stderr, pasar System.out
a printStackTrace()
:
new Exception("Stack trace").printStackTrace(System.out);
- 1. Depuración/impresión en un script de Hubot
- 2. ¿Cómo agrego un separador a un JComboBox en Java?
- 3. ¿Cómo agrego intellisense a mi aplicación?
- 4. ¿Cómo agrego curlpp a mi proyecto?
- 5. ¿Cómo agrego un CAPTCHA a mi formulario de PHP?
- 6. cómo imprimir el StackTrace completa en java
- 7. ¿Cómo agrego un UIWebView a mi aplicación iOS?
- 8. NullPointerException en Java sin StackTrace
- 9. ¿Cómo gestionar la impresión de depuración en F #
- 10. ¿Cómo agrego todo mi proyecto en GitHub?
- 11. Cómo obtener Clojure Stacktrace
- 12. Cómo escribir una familia de funciones de impresión (impresión de depuración, etc.) en Haskell
- 13. Cómo agrego el separador de miles a mi formulario html
- 14. ¿Cómo agrego una variable de configuración a mi script CMake?
- 15. ¿Cómo agrego el soporte de Applescript a mi aplicación Cocoa?
- 16. ¿Cómo agrego un archivo de encabezado precompilado a mi proyecto ios?
- 17. ¿Cómo agrego un tipo MIME a .htaccess?
- 18. impresión HashMap En Java
- 19. La impresión bonita en lxml falla cuando agrego etiquetas a un árbol analizado
- 20. C Macros de impresión de depuración
- 21. Depuración de HTML bastante impresión para Python
- 22. ¿Cómo agrego una columna calculada a mi modelo EF4?
- 23. ¿Cómo agrego puntos de interrupción a un SQL almacenado Procedimiento para la depuración?
- 24. Cómo agrego un segue a un UIGestureRecognizer
- 25. ¿Cómo agrego un dispositivo a dispositivos Xcode?
- 26. ¿Cómo agrego un archivo TXT a un recurso en mi archivo EXE?
- 27. Java - Necesita un paquete de registro que registrará el stacktrace
- 28. Cómo agrego componentes a un JPanel en tiempo de ejecución
- 29. Buscando una manera más fácil de escribir declaraciones de impresión de depuración en Java
- 30. cómo agrego un int a una cadena
El inconveniente es que dumpStack() solo va a stderr, y no se puede enviar a otro lugar como se puede con una excepción o Thread.getStackTrace(). –
Utilice el registro. La impresión de stdout/stderr solo debe realizarla las utilidades del sistema operativo y las aplicaciones "Hello World". –