Pergunta

Eu tenho um aplicativo java em execução na máquina linux. Eu executar o aplicativo java usando o seguinte:

java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n

Eu abri a porta 4000 para TCP nesta máquina Linux. Eu uso eclipse da máquina Windows XP e tentar conectar-se a esta aplicação. Eu abri a porta no Windows também.

Ambas as máquinas estão na LAN, mas eu não consigo conectar o depurador para o aplicativo Java. O que estou fazendo de errado?

Foi útil?

Solução

Editar: notei que algumas pessoas estão cortando e colando a invocação aqui. A resposta que deu originalmente era relevante apenas para o OP. Aqui está um estilo de invocação mais moderno (incluindo usando a porta mais convencional de 8000):

java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

resposta Original segue.


Tente isto:

java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

Dois pontos aqui:

  1. Não há espaços na opção runjdwp.
  2. Opções de vir antes do nome da classe. Todos os argumentos que você tem após o nome da classe são argumentos a seu programa!

Outras dicas

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 mais recente JDK:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006

Por favor, altere o número da porta com base em suas necessidades.

A partir java technotes

De 5.0 em diante, o -agentlib: JDWP opção é usada para carga e especificar opções para o agente JDWP. Para versões anteriores à 5.0, o -Xdebug e opções -Xrunjdwp são utilizadas (a implementação 5.0 também suporta as opções -Xdebug e -Xrunjdwp mas o mais recente -agentlib: opção JDWP é preferível como o agente JDWP em 5,0 usa a interface JVM TI para o VM em vez da interface JVMDI mais velho)

Mais uma coisa a nota, a partir JVM Tool documentação da interface :

JVM TI foi introduzido no JDK 5.0. JVM TI substitui o Java Virtual Machine Profiler Interface (JVMPI) eo Debug Interface Java Virtual Machine (JVMDI) que, a partir de JDK 6, já não são fornecidos.

Passos:

  1. Inicie a aplicação java remoto com a depuração opções como disse no post acima.
  2. Configurar o Eclipse para depuração remota especificando host e porta.
  3. Iniciar remoto depuração no Eclipse e esperar por conexão para ter sucesso.
  4. ponto de interrupção de Configuração e de depuração.
  5. Se você deseja depurar do início de uso do aplicativo suspender = y, isso irá manter o aplicativo remoto suspenso até que você se conectar de eclipse.

guia passo a passo em Java remoto depuração para maiores detalhes.

Resposta cobrindo Java> = 9:

Para Java 9 +, a opção JVM precisa de uma ligeira mudança prefixando o endereço com o endereço IP da máquina que hospeda o JVM, ou apenas *:

-agentlib:jdwp=transport=dt_socket,server=y,address=*:8000,suspend=n

Isto é devido a uma mudança notável na https://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435 .

Para Java <9, o número da porta é suficiente para se conectar.

Isto é como você deve configurar Eclipse Debugger para depuração remota:

Configurações Eclipse:

1.Click no botão Executar
2.Selecione o Configurações Debug
3.Selecione o “Java Remoto Aplicação”
Configuração 4.New

  • Nome: GatewayPortalProject
  • Project: GatewayPortal-portlet
  • Tipo de Conexão: Soquete Anexar
  • Propriedades de conexão: i) localhost ii) 8787

Para JBoss:

1.alterar o /path/toJboss/jboss-eap-6.1/bin/standalone.conf em sua vm como segue: Uncomment a seguinte linha, removendo o #:

JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

Para Tomcat:

Em catalina.bat arquivo:

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 Tomcat a partir do prompt de comando como abaixo:

catalina.sh jpda start

Em seguida, você precisa definir breakpoints nas classes Java que você deseja depurar.

Eu gostaria de enfatizar que ordem dos argumentos é importante .

Para mim java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar app.jar comando abre a porta depurador ,

mas o comando java -jar app.jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 não .

A melhor opção de depuração é criar registros e analisar logs. Mas em alguns casos precisamos aplicação web debug implantado no servidor.

Veja remotamente depurar ligação de uma aplicação web java . fluxo completo de depuração remota é descrito aqui. Espero que isso vai ajudar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top