mvc - Depure una aplicación Java sin iniciar la JVM con argumentos de depuración
spring java tutorial (5)
Solo para aclararlo, no es posible usar herramientas como jdb para adjuntarlas a las JVM existentes>> a menos que se hayan iniciado en modo de depuración
en la fuente soviética de Rusia te lee
jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426
Normalmente para adjuntar un desempate a un jvm en ejecución necesitaría iniciar el jvm con argumentos como los siguientes:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
Ahora, si quiero depurar un proceso que no se inició en modo de depuración, ¿qué puedo hacer?
Esta situación se produce cuando un sistema de producción (es decir, iniciado sin argumentos de depuración) muestra un error "aleatorio" (uso el término de forma vaga). Entonces no puedo reiniciar el jvm con los argumentos apropiados, porque nadie sabe cómo reproducir el error nuevamente. ¿Es imposible conectarse a la JVM en esta situación?
Solo para aclararlo, no es posible usar herramientas como jdb para adjuntarlas a las JVM que ya se están ejecutando a menos que se hayan iniciado en modo de depuración
de la página man de JVM
Otra forma de usar jdb es adjuntándolo a una VM Java que ya se está ejecutando. Una VM que debe depurarse con jdb se debe iniciar con las siguientes opciones:
Puede utilizar jsadebugd ( JDK ) para conectar un servidor de depuración al proceso (disponible en Windows con las herramientas de depuración para Windows ). Está marcado como experimental, por lo que es posible que desee probarlo primero en una máquina de prueba.
Uso:
jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost
El nombre del conector con arg se puede encontrar usando jdb -listconnectors
.
Siempre puedes usar jdb y depurar a mano: P
usar jstack (útil en caso de deadlocks) o el complemento btrace VisualVM también podrían hacer el truco
VisualVM no es un depurador, pero puede obtener volcados de hebras y volcados de heap que pueden ser útiles para diagnosticar algunos problemas. Las características más útiles requieren JVM 5 o 6.