Normalmente, para anexar um depurador a um jvm em execução, você precisa iniciar o jvm com argumentos como os seguintes:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
Agora, se eu quiser depurar um processo que não foi iniciado no modo de depuração, o que posso fazer?
Essa situação surge quando um sistema de produção (ou seja, iniciado sem argumentos de depuração) exibe um bug 'aleatório' (uso o termo vagamente). Portanto, não posso reiniciar o jvm com os argumentos apropriados, porque ninguém sabe como reproduzir o bug novamente. É impossível conectar ao JVM nesta situação?
Só para esclarecer, não é possível usar ferramentas como jdb para anexar a JVMs já em execução, a menos que tenham sido iniciadas no modo de depuração
da página de manual da JVM
Outra maneira de usar o jdb é anexá-lo a uma VM Java que já está em execução. Uma VM que deve ser depurada com jdb deve ser iniciada com as seguintes opções:
fonte
Respostas:
Você pode usar jsadebugd ( JDK ) para anexar um servidor de depuração ao processo (disponível no Windows com as Ferramentas de Depuração para Windows ). Está marcado como experimental, então você pode querer testá-lo primeiro em uma máquina de teste.
Uso:
O nome do conector com arg pode ser encontrado usando
jdb -listconnectors
.fonte
jsadebugd
foi substituído porjhsdb debugd
. Então isso se tornajhsdb debugd --pid <pid>
. Veja os slides de uma palestra apresentando jhsdb e os documentos para jhsdbSADebugServerAttachingConnector
foi removidojdb
também, e acho que a substituição deveria serjhsdb hsdb
/jhsdb clhsdb
. Não consigo encontrar nenhum documento sobre quais argumentos apresentarjhsdb clhsdb
.na Rússia Soviética, uma fonte lê você
fonte
VisualVM não é um depurador, mas você pode obter dumps de thread e heap dumps dele que podem ser úteis no diagnóstico de alguns problemas. Os recursos mais úteis requerem JVM 5 ou 6.
fonte
usando jstack (útil em caso de deadlocks) ou o plugin btrace VisualVM também pode resolver o problema
fonte
Você sempre pode usar jdb e depurar manualmente: P
fonte