Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Depure Aplicativos Java Remotamente com o Eclipse

Use a capacidade do Eclipse IDE para tornar a depuração de aplicativo Java agradável

Charles Lu, Software Engineer, IBM
Charles Lu é desenvolvedor de software no Laboratório de Desenvolvimento de Software da IBM, na China, e atualmente trabalha no desenvolvimento do IBM Lotus Expeditor. Tem interesse em programação de dispositivo, mensagem instantânea e tecnologia de voz.

Resumo:  Não é necessário depurar aplicativos Java™ apenas no seu desktop local. Saiba como tornar sua depuração agradável usando tipos de conexão diferentes que compõem a depuração remota. Este artigo explica os recursos e exemplos que mostram como configurar a depuração remota de aplicativo.

Data:  06/Fev/2012
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  310 visualizações
Comentários:  


A depuração remota pode ser útil para desenvolvimento de aplicativo, por exemplo, o desenvolvimento de um programa para uma máquina popular que não possa hospedar a plataforma de desenvolvimento ou depurar programas em máquinas dedicadas como servidores da Web, cujos serviços não possam ser encerrados. Outros exemplos incluem aplicativos Java executando com memória limitada ou capacidade de CPU, como dispositivos móveis ou desenvolvedores que desejam separar os ambientes de aplicativo ou desenvolvimento etc.

Pré-requisitos

Tipo de configuração de ativação

Uma configuração de ativação mantém um conjunto de atributos que pode ser usado para ativar um programa. O tipo de configuração de ativação é um tipo único de programa que pode ser ativado na plataforma Eclipse.

Se ainda não tiver feito isso, faça download do Eclipse V3.4 (Ganymede). No Ganymede, o conector de atendimento do soquete foi incluído no tipo de configuração de ativação do aplicativo Java remoto. O novo conector de atendimento do soquete permite que você inicie o depurador Java, que atende a uma conexão em um soquete específico. O programa que está sendo depurado pode ser iniciado com as opções de linha de comando para se conectar ao depurador. Antes do release do Ganymede, somente um conector de acoplamento de soquete era fornecido e o programa em depuração tinha de ser um host de depuração que estava conectado ao depurador. Não é prático que dispositivos móveis sejam host devido à insuficiência de memória e capacidade de CPU.

Para usar depuração remota, a Java Virtual Machine (JVM) V5.0 ou posterior deve ser usada, por exemplo, o IBM® J9 ou o Java SE Development Kit (JDK) da Sun Microsystems. Neste artigo, nosso enfoque será a depuração remota, em vez de detalhar cada um dos recursos de depuração do Eclipse. Consulte Resource para obter informações sobre como depurar com o Eclipse e onde localizar o software mencionado acima.

Introdução à JPDA

Acrônimos usados frequentemente

  • JDI — Java Debug Interface
  • JDT — Java Development Tools
  • JDWP — Java Debug Wire Protocol
  • JPDA — Java Platform Debugger Architecture
  • JVM — Java Virtual Machine
  • JVMDI — JVM Debug Interface
  • JVMTI — JVM Tool Interface
  • VM — Máquina Virtual

A tecnologia Java Platform Debugger Architecture (JPDA) da Sun Microsystems é uma arquitetura que permite depurar aplicativos Java facilmente em todas as situações. A JPDA é composta por duas interfaces (JVM Tool Interface e JDI, respectivamente), um protocolo (Java Debug Wire Protocol) e dois componentes de software que estão vinculados (backend e front-end). É projetada para ser usada por depuradores em qualquer ambiente. A JPDA não é apenas para sistemas de desktop, mas também funciona bem com sistemas incorporados.

A JVM Tool Interface (JVMTI) define o que uma VM deve fornecer para depuração. (Nota do editor: A partir do Java V5, a JVMTI substituiu a JVMDI, que foi usada no Java V1.4.) O Java Debug Wire Protocol (JDWP) descreve o formato das informações de depuração e solicitações transferidas entre o processo que está sendo depurado e um font-end do depurador, que implementa a JDI, como Eclipse, Borland JBuilder e muitos outros. O programa que está sendo depurado é frequentemente denominado debuggee (programa depurado) na especificação do JPDA da Sun. A JDI é uma interface de alto nível para definir as informações e solicitações usadas para depuração remota. A arquitetura é estruturada com segue.


Listagem 1. A Java Platform Debugger Architecture

             Componentes                      Interfaces do Depurador

                 /    |--------------|
                /     |     VM       |
 debuggee -----(      |--------------|  <---- JVMTI - Java VM Tool Interface
                \     |   back-end   |
                 \    |--------------|
                 /           |
 canal com.   --(            |  <------------ JDWP - Java Debug Wire Protocol
                 \           |
                 /    |--------------|
                /     |  front-end   |
 depurador-----(      |--------------|  <---- JDI - Java Debug Interface
                \     |      UI      |
                 \    |--------------|	
	  

Assim, quaisquer ferramentas de terceiros e a VM baseada em JPDA devem trabalhar juntos sem reclamação. Essa arquitetura cliente-servidor permite que você depure um programa Java em uma estação de trabalho local executando a plataforma, ou o depure usando inclusive um computador remoto na rede.

Antes de falar sobre as coisas do cenário de depuração, é necessário introduzir dois termos usados na especificação da JPDA: conector e transporte. Um conector é uma abstração da JDI usado para estabelecer uma conexão entre um aplicativo depurador e uma VM de destino. Um transporte define como os aplicativos acessam e transmitem dados entre o front-end e o backend. Os conectores "mapeiam" aos tipos de transporte disponíveis e aos modos de conexão. Na implementação de referência do JPDA, da Sun, dois mecanismos de transporte são fornecidos no Microsoft® Windows®: transporte de soquete e transporte de memória compartilhada. Conectores disponíveis:

  • Conector de acoplamento do soquete
  • Conector de acoplamento da memória compartilhada
  • Conector de atendimento do soquete
  • Conector de atendimento da memória compartilhada
  • Conector de ativação da linha de comandos

No estabelecimento de uma conexão entre um aplicativo do depurador e a VM de destino, um lado atua como servidor e atende a uma conexão. Algum tempo depois, o outro lado se conecta ao listener e estabelece uma conexão. As conexões permitem que o aplicativo do depurador ou a VM de destino atue como um servidor. As comunicações entre processos podem estar executando em uma ou diferentes máquinas.

O problema de depurar um programa Java remotamente não está no front-end do depurador, mas no backend Java remoto. Infelizmente, não há muita informação sobre isso no sistema de ajuda do Eclipse. Na verdade, a JDI e a JVMTI são implementadas pelo Eclipse e o ambiente do tempo de execução Java, respectivamente. A única coisa com que estamos preocupados é o JDWP, que contém as informações para se comunicar com a JVMTI e a JDI. O JDWP contém muitos argumentos que foram incluídos para chamar o aplicativo para o aplicativo java remoto. Seguem alguns argumentos usados neste artigo.

-Xdebug
Ativa os recursos de depuração.
-Xrunjdwp:<subopções>
Carrega a implementação do JDWP na VM de destino. Usa um transporte e o protocolo JDWP para se comunicar com um aplicativo separado do depurador. As subopções específicas estão descritas abaixo.

A partir da Java V5, é possível usar a opção -agentlib:jdwp em vez de -Xdebug e -Xrunjdwp. Mas, se tiver de se conectar à VM antes da V5, -Xdebug e -Xrunjdwp serão a única opção. Seguem algumas breves descrições das subopções -Xrunjdwp.

transport
Geralmente, o transporte do soquete é usado. Mas o transporte de memória compartilhada também pode ser usado na plataforma Windows, se disponível.
servidor
Se o valor for y, o aplicativo de destino atende a um aplicativo do depurador a ser conectado. Caso contrário, ele se conecta a um aplicativo do depurador no endereço especificado.
address
Esse é o endereço de transporte da conexão. Se o servidor estiver n, tente se conectar a um aplicativo do depurador nesse endereço. Caso contrário, atenda a uma conexão nessa porta.
suspender
Se o valor for y, a VM de destino será suspensa até que o aplicativo do depurador se conecte.

Para explicações detalhadas para cada configuração de depuração, consulte a documentação do JPDA (consulte Recursos).

A Listagem 2 mostra um exemplo de como ativar uma VM no modo de depuração e atender a uma conexão de soquete na porta 8765.


Listagem 2. A VM de destino atua como um servidor de depuração

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8765

A Listagem 3 mostra como se conectar a um aplicativo do depurador em execução usando um soquete no host 127.0.0.1, na porta 8000.


Listagem 3. A VM de destino atua como um cliente de depuração

-Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000


Recursos da depuração remota no Eclipse

O Eclipse é um front-end de depurador Java gráfico. A JDI é implementada no pacote configurável org.eclipse.jdt.debug. Neste artigo, não discutiremos os detalhes da implementação da JDI. Consulte Recursos para obter informações sobre a tecnologia Eclipse JDT e Java JDI.

A primeira coisa que desejamos saber é que conector do Eclipse usar. Para aprender os tipos de conexão remota fornecidos pelo Eclipse, é possível incluir uma configuração de ativação no Remote Java Application acessando o menu do Eclipse e selecionando Run > Debug Configurations..., e selecionando o conector na lista suspensa. Dois conectores são fornecidos no Ganymede:

  • Conexão do Soquete
  • Atendimento do Soquete

Para o conector de atendimento do soquete, a Eclipse VM será o host a ser conectado pelo aplicativo Java remoto. Para o conector de acoplamento do soquete, a VM de destino será o host. Não há nenhuma diferença para a depuração de aplicativo entre os dois conectores — o usuário pode escolher. Uma boa regra geral é usar um computador mais sofisticado e mais rápido como o host de depuração da VM devido aos recursos de computação necessários.

Antes de depurar o seu aplicativo Java, é necessário ter certeza de que as opções de depuração estão todas ativadas para o seu aplicativo remoto. Se essa informação não estiver disponível, você obterá uma mensagem de erro, do tipo "Debug information is not available" ou "Unable to install breakpoint due to missing line number". É possível modificar as configurações do menu do Eclipse mudando o que está definido em Window > Preferences > Java > Compiler.


Figura 1. Opções de depuração no Eclipse



Depurar um aplicativo remotamente

Estamos prontos para iniciar a depuração de um aplicativo remotamente. Vamos fazer isso etapa a etapa:

1. Criar um projeto Java com uma classe simples
Vamos criar uma classe simples para propósito de depuração apenas. A Listagem 4 mostra o código de amostra.

Listagem 4. Código de amostra para depuração

package com.ibm.developerWorks.debugtest;

public class test {

public static void main(String[] args) {
System.out.println("This is a test.");
}
}

2. Definir um ponto de interrupção
Defina um ponto de interrupção no código. Neste exemplo, definiremos o ponto de interrupção na linha System.out.println("This is a test.");.

Figura 2. Definir ponto de interrupção no Eclipse

3. Depurar o aplicativo localmente
Antes de depurar seu aplicativo, assegure que as opções de depuração descritas na Figura 1 estejam ativadas para o projeto. É desnecessário depurar um aplicativo localmente, mas é possível assegurar que todas as informações de depuração estejam disponíveis. Clique com o botão direito do mouse no projeto Java, selecione Debug As e Java Application (veja a Figura 3). Se a execução do aplicativo estiver parada no ponto de interrupção, as informações de depuração são apresentadas corretamente. É possível continuar a usar os recursos de depuração, como exibir a pilha de depuração, gerenciamento de ponto de interrupção ou variáveis etc.

Figura 3. Depurar o aplicativo localmente

4. Exportar o projeto Java
Usaremos esse aplicativo como o destino da depuração. Clique com o botão direito do mouse no projeto Java, selecione Exportar, selecione Java e escolha JAR file ou Runnable JAR file para exportar o projeto. O arquivo JAR será gerado no local desejado. Esteja certo de que se a fonte Java não corresponder ao aplicativo de destino, a função de depuração não funcionará corretamente.
5. Executar o aplicativo Java manualmente
Abra um console para ativar o aplicativo manualmente e ter certeza de que o Java Runtime Environment está configurado devidamente.

Listagem 5. Amostra de chamada de aplicativo Java

java -jar test.jar

6. Depurar o aplicativo remotamente
Copie o arquivo JAR para o local apropriado no computador remoto, ou para a mesma máquina, chame o servidor de depuração e conecte um cliente a ele. O aplicativo Java simples pode atuar como um servidor ou cliente de depuração. Dependendo da configuração, é possível escolher o tipo de conexão Socket Attach ou Socket Listen no Eclipse. Saiba como executar o aplicativo como um servidor ou cliente nas duas seções a seguir.

A VM de destino atua como um servidor de depuração

O exemplo a seguir chama o aplicativo Java no lado remoto, atua como um servidor de depuração e atende a uma conexão de soquete na porta 8000. A VM de destino será suspensa até que o depurador se conecte.


Listagem 6. Amostra de chamada da VM para modo de conexão de soquete no Eclipse

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" -jar
     test.jar

Inicie o Eclipse usando a configuração de ativação remota e especifique o endereço da VM de destino do aplicativo remoto. Para isso, clique em Run > Debug Configurationse clique duas vezes em Remote Java Application no menu Eclipse. Na configuração de ativação recém-criada, especifique o IP e a porta do aplicativo de destino. Para executar o aplicativo remoto na mesma máquina, simplesmente especifique o IP do host como localhost ou 127.0.0.1.


Figura 4. Configuração da conexão de acoplamento do soquete


Selecione a opção Allow termination of remote VM para terminar a VM à qual está se conectando durante a depuração do aplicativo.


Figura 5. Botão Terminate no Eclipse


A VM de destino atua como um cliente de depuração

O segundo exemplo é usar um aplicativo Java simples que atua como um cliente de depuração, e o front-end do depurador atua como um servidor de depuração. O Eclipse usa o tipo de conexão do modo de atendimento do soquete para atendimento. O front-end de depuração deve ser iniciado com antecedência para atender em uma porta específica. A Figura 6 mostra uma configuração de amostra para configurar o atendimento.


Figura 6. Configuração da conexão de atendimento do soquete


Clique no botão Debug do Eclipse e a barra de status mostrará a mensagem "waiting for vm to connect at port 8000..." Quando vir tal mensagem, inicie o aplicativo remoto. A Listagem 7 mostra como chamar o aplicativo Java como um cliente de depuração e conectá-lo a um aplicativo do depurador em execução usando um soquete no host 127.0.0.1, na porta 8000.


Listagem 7. Amostra da chamada da VM para conexão de listagem de soquete no Eclipse

    java -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8000,suspend=y
         -jar test.jar

Se tudo ocorrer bem, a perspectiva de depuração será exibida para dar suporte à depuração de aplicativo, e a execução do aplicativo Java remoto será parado normalmente. Isso é similar à Etapa 3 que fizemos na depuração local (veja a Figura 3). A esta altura, é possível usar as funções de depuração padrão, como configurar pontos de interrupção e valores, execução de etapa etc.


Conclusão

Este artigo ilustrou como usar o tipo de configuração de aplicativo Java remoto integrado do Eclipse para executar a depuração de aplicativo remotamente. Apresentou como configurar um aplicativo Java para chamar a depuração remota e ajudou a compreender os conectores que o Eclipse fornece. Finalmente, você aprendeu a como aplicar essa tecnologia nos seus projetos.


Recursos

Aprender

Obter produtos e tecnologias

Discutir

  • O programa Newsgroup da Plataforma Eclipse deverá ser sua primeira parada para discussão das questões relacionadas ao Eclipse. (A seleção deste link ativará seu aplicativo leitor de notícias Usenet padrão e abrirá eclipse.platform.)

  • O programa Newsgroup do Eclipse tem muitos recursos para pessoas interessadas no uso e na extensão do Eclipse.

  • Participe dos blogs do developerWorks e participe da comunidade do developerWorks.

Sobre o autor

Charles Lu é desenvolvedor de software no Laboratório de Desenvolvimento de Software da IBM, na China, e atualmente trabalha no desenvolvimento do IBM Lotus Expeditor. Tem interesse em programação de dispositivo, mensagem instantânea e tecnologia de voz.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre, Tecnologia Java
ArticleID=789315
ArticleTitle=Depure Aplicativos Java Remotamente com o Eclipse
publish-date=02062012

Conheça a IBM da sua cidade

Virtual Branch Office Brasil

A IBM está mais perto do que você imagina!


Tags

Help
Use o campo de pesquisa para encontrar todos os tipos de conteúdo no My developerWorks com essa tag.

Use a barra de rolagem para ver mais ou menos tags.

Tags populares mostra as principais tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Minhas tags mostra suas tags para esta zona de conteúdo em particular (por exemplo, Java technology, Linux, WebSphere).

Use o campo de pesquisa para localizar todos os tipos de conteúdo no Meu developerWorks com essa tag. Tags populares mostra as tags principais para essa zona de conteúdo particular (por exemplo, tecnologia Java, Linux, WebSphere). My tags shows your tags for this particular content zone (for example, Java technology, Linux, WebSphere). Minhas tags mostra as suas tags para essa zona de conteúdo em particular (por exemplo, tecnologia Java, Linux, WebSphere).