Normalmente, para adjuntar un depurador 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 surge cuando un sistema de producción (es decir, iniciado sin argumentos de depuración) muestra un error "aleatorio" (uso el término libremente). 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 aclarar, no es posible usar herramientas como jdb para adjuntar a JVM que ya se están ejecutando a menos que se hayan iniciado en modo de depuración
desde la página de manual de JVM
Otra forma de utilizar jdb es adjuntarlo a una máquina virtual Java que ya se esté ejecutando. Una máquina virtual que se va a depurar con jdb debe iniciarse con las siguientes opciones:
fuente
Respuestas:
Es posible que pueda usar jsadebugd ( JDK ) para adjuntar 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:
El nombre del conector con arg se puede encontrar usando
jdb -listconnectors
.fuente
jsadebugd
fue reemplazado porjhsdb debugd
. Entonces eso se vuelvejhsdb debugd --pid <pid>
. Vea las diapositivas de una charla que presenta jhsdb y los documentos para jhsdbSADebugServerAttachingConnector
se eliminójdb
, y creo que se supone que el reemplazo esjhsdb hsdb
/jhsdb clhsdb
. No puedo encontrar ningún documento sobre qué argumentos darjhsdb clhsdb
.en la fuente de Rusia soviética te lee
fuente
VisualVM no es un depurador, pero puede obtener volcados de subprocesos y volcados de montón que pueden ser útiles para diagnosticar algunos problemas. Las funciones más útiles requieren JVM 5 o 6.
fuente
usar jstack (útil en caso de interbloqueos) o el complemento btrace VisualVM también podría funcionar
fuente
Siempre puede usar jdb y depurar manualmente: P
fuente