O Debugger Java, além de permitir o debug local das aplicações Java, permite também conectar-se a uma aplicação rodando em servidor remoto e fazer o debug remotamente. Isto pode ser de grande ajuda em certos casos!

Aqui eu irei explicar o básico da configuração deste debug remoto, exemplificarei com o JBoss 5.x e mostrarei um passo-a-passo de como realizar o debug remoto pelo Eclipse!

Habilitando o Remote Debug

Para habilitar o debug remoto na JVM, é preciso executá-la com alguns parâmetros de configuração específicos. São eles:

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

Um pouco sobre estes parâmetros:

  • -Xdebug: inicializa a JVM em modo de debug;
  • -Xrunjdwp: carrega bibliotecas específicas para o tipo de conexão que desejamos fazer ao debugger:
    • transport=dt_socket: indica que queremos nos conectar ao Debugger através de um socket;
    • address=5251: diz que nos conectaremos na porta 5251 (pode configurar outra, a padrão é 1044);
    • suspend=n: indica se a JVM deve ser suspensa, isto é, ela só irá executar a aplicação quando algum debugger se conectar; isto é útil quando queremos debugar uma aplicação desde a sua inicialização, por exemplo.

Para conectar-se à aplicação utilizando o jdb.exe, que vem com a instalação padrão do JDK, basta executar no prompt de comandos o comando:

jdb -attach 5251

Alternativamente, você pode utilizar o Eclipse para se conectar à aplicação e fazer o debug em modo gráfico! Veja abaixo como fazer! :)

Habilitando o Debug no JBoss Application Server:

No JBoss 5.1, para incluir os parâmetros de configuração da JVM vistos acima, você precisa editar o arquivo de configuração do servidor run.conf.bat (Windows, run.conf em Unix), que se encontra na pasta bin, dentro da pasta de instalação do JBoss. Neste arquivo, existem as linhas de configuração do debug, que vêm comentadas por padrão:

# Sample JPDA settings for remote socket debugging
#JAVA_OPTS=”$JAVA_OPTS
-Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n”

Descomente a segunda linha. Lembre-se de configurar a porta para a que você deseja usar na conexão! Além disso, nesta linha não está presente a configuração -Xdebug, que ativa o modo de debug da JVM. Portando adicione-a, ficando assim:

# Sample JPDA settings for remote socket debugging
JAVA_OPTS=”$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=5251,server=y,suspend=n”

Alterado isto, basta rodar o servidor que você verá estas opções sendo carregadas na sua inicialização:

C:\Users\thiago.carvalho>run
Calling C:\Aplicativos\jboss\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.conf.bat
===============================================================================

JBoss Bootstrap Environment

JBOSS_HOME: C:\Aplicativos\jboss\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA

JAVA: c:\Program Files\Java\jdk1.6.0_11\\bin\java

JAVA_OPTS: -Dprogram.name=run.bat -Xms128M -Xmx300M -XX:MaxPermSize=192M
-Dsun.rmi.dgc.client.gcInterval=600000 -Dsun.rmi.dgc.server.gcInterval=600000
-Dorg.jboss.resolver.warning=true -Xdebug -Xrunjdwp:transport=dt_socket,address=5251,server=y,suspend=n
-server

CLASSPATH: C:\Aplicativos\jboss\jboss-5.1.0.GA-jdk6\jboss-5.1.0.GA\bin\run.jar

===============================================================================

Listening for transport dt_socket at address: 5251
19:33:50,594 INFO  [ServerImpl] Starting JBoss (Microcontainer)...

Note que já que a JVM é carregada ela já passa a escutar na porta configurada para debug!

Configurando o Eclipse para conectar-se e debugar remotamente uma aplicação:

Os passos são os seguintes:

  1. Acessar a tela de configurações de debug do Eclipse;
  2. Criar uma nova configuração de debug;
  3. Configurar para debug remoto do nosso projeto Java.

1. Acessar a tela de configurações de debug do Eclipse:

Eclipse - Configurações de Debug

2. Criar uma nova configuração de debug:

Selecione o tipo de configuração de debug desejado: Remote Java Application. Como segue:

Eclipse - Nova configuração de debug

3. Configurar para debug remoto do nosso projeto Java:

Agora configuramos o projeto que será debugado, o host onde o projeto está rodando na JVM em modo de debug, o tipo de conexão (socket attach) e a porta de comunicação. Note que se você precisar debugar mais de um projeto rodando nesta mesma JVM, se eles estiverem abertos no seu workspace do Eclipse, eles serão automaticamente acessados durante o debug!

Eclipse - Configuração de debug remoto

Após isso, você pode inserir esta nova configuração de debug nas Favoritas, para poder acessá-las mais rapidamente. No Tutorial sobre integração do TortoiseHg ao Eclipse, é detalhado a adição de uma configuração de lançamento de ferramenta externa ao Favoritos. A adição de favoritos ao Debug é semelhante, portanto você pode se guiar pelas telas daquele Tutorial para fazer a mesma coisa aqui, se achar necessário! ;)

Google ReaderTwitterGoogle BuzzFacebookOrkutLinkedInWordPressBlogger PostShare

Publicações relacionadas:

  1. Eclipse JavaDoc @author tag: colocar nome ao invés do login
  2. Autenticação JAAS no JBoss: pegando o erro do login
  3. Usando TortoiseHg dentro do Eclipse