¿Es posible tener una sesión de depuración post-mortem (o post-excepción) en Java? ¿Cuáles serían las soluciones (si todavía no hay una solución para esto)?¿Depuración post-mortem de Java?
Respuesta
puede adjuntar el depurador a un proceso de Java y establecer un punto de interrupción cuando se recibe una excepción específica. ¿Esto es lo que necesitas?
De http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/jdb.html
Cuando se produce una excepción para los que no hay una relación de capturas en cualquier lugar hasta la pila de un programa Java, el tiempo de ejecución de Java normalmente vuelca una traza y salidas excepción . Cuando se ejecuta bajo jdb, sin embargo, que excepción es tratada como una no recuperable punto de interrupción, y jdb se detiene en la instrucción infractor. Si esa clase fue compilado con la opción -g, variables de instancia y locales pueden ser impresa para determinar la causa de la excepción.
Este tipo de puntos de interrupción se puede configurar con cualquier IDE, como Eclipse. Usando eclipse también puede establecer un punto de interrupción en un tipo de excepción específico, incluso si está atrapado en el código normal.
Si tiene algo así como un servidor multiproceso en ejecución, y uno de los subprocesos que da servicio a un cliente arroja una excepción no controlada, entonces podría verificar el depurador y ver qué pasa. No creo que esto sea algo para producción, pero definitivamente ayuda cuando se prueba.
La aplicación no tiene que ejecutar desde el depurador, pero puede ser lanzado con las opciones de depuración como argumentos:
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=XXXX
La aplicación se ejecuta normalmente, pero cambia al modo "interpretado" cuando un punto de interrupción es éxito, al menos en las versiones más modernas de la JVM. Entonces el rendimiento no se ve afectado.
Consulte la sección sobre full-speed debugging for HotSpot VM
velocidad completa depuración
La máquina virtual Java HotSpot ahora utiliza depuración de máxima velocidad. En la versión anterior de la VM, cuando la depuración era habilitada, el programa ejecutado usando solo el intérprete. Ahora, la completa ventaja de rendimiento de la tecnología HotSpot está disponible para los programas, incluso con código compilado. El rendimiento mejorado de permite depurar más fácilmente los programas de larga ejecución . También permite que las pruebas procedan al a velocidad máxima. Una vez que hay una excepción , el depurador se inicia con visibilidad total de las fuentes de código.
Por lo que sé, tendrías que esperar a Java 7 para obtener una API oficial - ver http://tech.puredanger.com/java7#jsr326.
Mientras tanto, puede sustituir Exception (reemplace la clase base, inyectar el código a través de la instrumentación, etc.) para conservar sus datos. Tenga en cuenta que el ClassLoader arroja y captura ClassNotFoundException regularmente (cada nuevo paquete cargado). Tendrás mucho control de esa manera sin tener que modificar tu código base.
Si bien hay muchas palabras en común, JSR 326 no responde (AFAIK) a la pregunta que se hizo. Más bien, establece formatos estándar y herramientas para leer artefactos producidos a partir de programas Java (volcados de pila, rastreos de pila, etc.). No veo cómo eso te permitirá depurar la autopsia. –
@alex Debo haber asumido que al "depurar post moretem" Charade significaba pasar por el montón/obtener un seguimiento preciso de pila antes de la muerte de jvm. Tienes razón, realmente no responde la pregunta. –
Probablemente significó exactamente como en Python, donde simplemente puede llamar a ['import pdb; pdb.pm() '] (https://docs.python.org/2/library/pdb.html) después de cualquier excepción. Muy útil para la depuración. –
Soy un arquitecto de soluciones para soluciones de reproducción. Proporcionan una "máquina del tiempo" para aplicaciones Java. Puede grabar una aplicación mientras se está ejecutando (digamos, en un entorno de control de calidad) y luego reproducir la grabación en su máquina de desarrollo. No necesita acceder a la base de datos, configuraciones, etc. Todo lo que necesita es su solución ReplayDIRECTOR y puede solucionar el problema en los confines de su IDE. Los problemas que se pueden reproducir varían desde problemas de configuración, excepciones de base de datos hasta problemas de subprocesamiento. Echar un vistazo:
Voy a echar un vistazo tan pronto como regrese del trabajo. – Geo
- 1. depuración Sincronización Java
- 2. Java: depuración con SwingUtilities.invokeLater()
- 3. Depuración código ofuscado java
- 4. Java Depuración: origen no encontrado
- 5. Depuración de Java remota entre continentes
- 6. de Java en tiempo real depuración (juegos)
- 7. Depuración de código Java línea por línea
- 8. verificación de depuración habilitada check in java
- 9. Depuración remota de Java, ¿cómo funciona técnicamente?
- 10. Depuración remota de una aplicación Java
- 11. Eclipse Java Depuración con archivos fuente faltantes
- 12. ¿Es posible habilitar depuración para un proceso de Java después de que se inicia sin depuración
- 13. Java jdb herramienta de línea de comandos de depuración remota
- 14. Depuración de una pérdida de memoria extraña - Java/Tomcat
- 15. Depuración de trabajos crontab
- 16. Técnicas de depuración sin herramientas de depuración
- 17. depuración de java: observe una variable fuera del alcance
- 18. depuración de JavaScript
- 19. Métodos abreviados de depuración de Java Eclipse en "Edición de código fuente de Java"
- 20. Depuración de depuración o lanzamiento del informe?
- 21. "Activo (depuración)" "depuración" frente a
- 22. Depuración de Android InetAddress.isReachable
- 23. Depuración remota Aplicación web Java que se ejecuta en Glassfish
- 24. depuración remota Java JVM Eclipse con una consola habilitada
- 25. Depuración Error de conexión de JConsole
- 26. Instalar DLL de depuración de MS para la depuración remota
- 27. ¿Qué difiere cuando la compilación de depuración se ejecuta con depuración y sin depuración?
- 28. Depuración de Adobe ExtendScript
- 29. Metaprogramas de depuración
- 30. Depuración de propiedades automáticas
Lo que pasa es que mi aplicación se ejecutará durante un periodo indeterminado de tiempo, y si se va a lanzar una excepción, me gustaría depurar. El problema es que si ejecuto la aplicación en el depurador, el rendimiento se degradará. – Geo
He ampliado la información sobre la depuración a toda velocidad. –
Hola Mario, parece que tienes experiencia con la conexión de jdb a un proceso en ejecución ... ¿Serías capaz de responder mi pregunta aquí ...http: //stackoverflow.com/questions/28528325/attach-jdb-on-uncaught-exception ....Gracias. – nave