Debugando aplicações Java remotamente

Este recurso é útil quando se tem um problema específico em um ambiente, cujas as causas são complexas e que tal ambiente não pode ser transposto para a máquina que acondiciona todo o aparato de desenvolvimento, seja por questões de tempo ou de tamanho do ambiente a ser transportado.

A JPDA (Java Platform Debugger Architecture) é um conjunto de APIs que provê suporte a debug remoto para aplicações Java, neste conjunto temos a JDI (Java Debug Interface). A configuração deste recurso é feito nas duas pontas: JBoss e Eclipse; ambos possuem suporte a esse recurso.

Na prática basta alinhar o JBoss e o Eclipse, segundo os respectivos parâmetros indicados abaixo, para que eles possam trocar informações de debug.

JBoss

Acrescente no JAVA_OPTS os seguintes parâmetros e seus respectivos valores:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:7788

Onde os valores presentes representam:

0.0.0.0 - indica que a conexão é feita através de todas as interfaces de redes;
7788 - indica a porta que é utilizada;

📘

Dica

Se você tem dúvidas sobre o arquivo e como configurar a JAVA_OPTS clique aqui

Eclipse

Crie uma nova configuração para debug remoto conforme os passos indicados nas figuras abaixo:

Passo 1 - Abra o menu "Run" e em seguida "Run Configurations"

776

Passo 2 - Crie uma nova configuração clicando “Remote Java Application”:

1327

Passo 3 - Insira as informações de conexão de acordo com o que foi configurado no JBoss:

1208

Na figura acima se atente para os campos em destaque, onde:

Name: Nome para seu item de debug remoto.

Projeto: Clique em browser e determine o projeto a ser debugado.

Conection type: tipo de conexão, use a “Standard”.

Host: IP ou Host da máquina onde está o JBoss.

Porta: porta para a conexão (a mesma utilizada nas configurações do JBoss).

🚧

Atenção

Um detalhe sobre esse debug é que ao se iniciar o Jboss, o processo fica aguardando a conexão de debug, ou seja, a inicialização fica parada até que o eclipse faça a conexão. Uma alternativa a essa situação é incluir a propriedade: suspend=n ao comando. Exemplo:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=0.0.0.0:7788

Dessa forma, a inicialização do Jboss não deve parar, e o debug pode ser feito a qualquer momento.

Como tirar dúvidas?

Para tirar dúvidas e compartilhar informações, use a sala Debug da comunidade Sankhya Developer.