Depuração remota de uma aplicação Java
Tenho uma aplicação java a correr na máquina linux. Executei a aplicação java usando o seguinte:
java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n
abri a porta 4000 para o TCP nesta máquina Linux. Eu uso o eclipse da máquina Windows XP e tento conectar-me a esta aplicação. Também abri a porta nas janelas.
ambas as máquinas estão na LAN, mas não consigo ligar o depurador à aplicação Java. O que estou a fazer de errado?
5 answers
Edit: eu notei que algumas pessoas estão cortando e colando a invocação aqui. A resposta que dei inicialmente era apenas relevante para a operação. Aqui está um estilo mais moderno de Invocação (incluindo o uso do porto mais convencional de 8000):
java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>
Segue-se a resposta Original.
Tenta isto:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp
Dois pontos:
- sem espaços na opção
runjdwp
. - as opções vêm antes do nome da classe. Quaisquer argumentos que tenha após o nome da classe são argumentos para o seu programa!
Para JDK 1.3 ou anterior:
-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
Para JDK 1, 4
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006
Para o JDK mais recente:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006
Por favor, mude o número do Porto com base nas suas necessidades.
A partir de 5.0 a opção-agentlib: jdwp é usada para carregar e especificar opções para o agente da JDWP. Para versões anteriores a 5.0, o-Xdebug e - As opções Xrunjdwp são usadas (a implementação 5.0 também suporta as opções-Xdebug e-Xrunjdwp, mas as mais recentes - agentlib: a opção jdwp é preferível, uma vez que o agente JDWP em 5.0 usa a interface JVM TI para a VM rather than the older JVMDI interface)
Mais uma coisa a notar, de documentação da interface de ferramentas JVM:
A JVM TI foi introduzida na JDK 5.0. JVM TI substitui o Java Virtual Machine Profiler Interface (JVMPI) e o Java Virtual Machine Debug Interface (JVMDI) que, a partir de JDK 6, não são mais fornecidos.
Passos:
- Inicie a sua aplicação java remota com opções de depuração, tal como referido na publicação acima.
- Configurar o Eclipse para depuração remota, indicando a máquina e o porto.
- iniciar a depuração remota no Eclipse e esperar que a ligação tenha sucesso.
- Configurar o ponto de paragem e depuração.
- Se quiser depurar desde o início da aplicação use suspens=y, isto irá manter a aplicação remota suspensa até que se ligue ao eclipse.
Ver passo a passo no Java remote debugging para mais detalhes.
É assim que deve configurar o depurador Eclipse para depuração remota:
Configuração Do Eclipse:
1.Carregue no botão Executar
2.Seleccione as configurações de depuração
3.Seleccione a "aplicação Java remota"
4.Nova Configuração
- Nome : GatewayPortalProject
- projecto: GatewayPortal-portlet
- Tipo De Ligação: 'Socket Attached'
- Propriedades Da Ligação: i) localhost ii) 8787
Para JBoss:
1.Alterar o /path/toJboss/jboss-eap-6.1/bin/standalone.conf
na sua vm da seguinte forma::
Descomentar a seguinte linha removendo o#:
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
Para O Tomcat :
In catalina.bat ficheiro:
Passo 1:
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
Passo 2:
JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
Passo 3: Executar o Tomcat a partir da linha de comandos abaixo:
catalina.sh jpda start
Então você precisa definir pontos de paragem nas classes Java que deseja depurar.
A melhor opção de depuração é criar registos e analisar registos. Mas em alguns casos precisamos depurar aplicação web implantada no servidor.
Ver depurar remotamente uma aplicação web java ligação. O fluxo completo de depuração remota está descrito aqui. Espero que ajude.