O depurador do Eclipse e a visualização Debug
O Eclipse SDK – em especial, o projeto Java Development Tools (JDT) – apresenta um depurador Java integrado que fornece toda a funcionalidade de depuração, incluindo a capacidade de realizar execução por etapas, configurar pontos de interrupção e valores, inspecionar variáveis e valores, e suspender e retomar encadeamentos. Adicionalmente, é possível depurar aplicativos executando em uma máquina remota. A plataforma Eclipse é robusta de tal modo que outras linguagens de programação podem usar os recursos de depuração dos seus respectivos tempos de execução de linguagem. Como você verá abaixo, a mesma visualização Debug do Eclipse também está disponível para as linguagens de programação C/C++.
O ambiente de trabalho da plataforma Eclipse e suas ferramentas são desenvolvidos em torno dos componentes JDT, que fornecem os seguintes recursos para o Eclipse:
- Ferramentas de gerenciamento de projeto;
- Perspectivas e visualizações;
- Funções Builder, editor, procura e desenvolvimento;
- O depurador.
O depurador do Eclipse existe como um conjunto padrão de plug-ins incluído no Eclipse. O Eclipse também tem uma visualização de depuração especial que permite o gerenciamento da depuração ou execução de um programa no ambiente de trabalho. Ele exibe a estrutura da pilha dos encadeamentos suspensos para cada destino que você está depurando. Cada encadeamento no programa aparece como um nó na árvore e a visualização Debug exibe o processo de cada destino que você está executando. Se o encadeamento estiver suspenso, suas estruturas de pilha são mostradas como elementos filho.
Antes de começar a usar o depurador do Eclipse, presume-se que você tenha o Java SDK/JRE apropriado (recomendo usar o Java VM V1.4) e o Eclipse Platform SDK V3.3 instalado, e que ambos estejam executando sem problemas. No geral, é uma boa ideia testar as opções de depuração usando as amostras do Eclipse primeiro. Se você deseja desenvolver e depurar projetos C/C++, terá adicionalmente de obter e instalar as C/C++ Development Tools (CDT). Sobre links para o Java SDK/JRE, a plataforma Eclipse e amostras, e as CDT, consulte “Recursos”. A Figura 1 mostra a visualização geral da perspectiva Debug.
Figura 1. Visão geral da perspectiva Debug do Eclipse.
Depurando programas da linguagem Java
Antes que seja possível depurar seu projeto, o código precisa compilar e executar de modo nítido. É necessário criar uma configuração de execução para o seu aplicativo e assegurar que ele inicie devidamente. Em seguida, é necessário definir a configuração de depuração em um modo similar usando o menu Run > Debug. Também é necessário selecionar a classe a ser usada como a classe Java principal pelo depurador (veja a Figura 2). É possível ter tantas configurações de depuração para um único projeto quanto desejado. Quando o depurador é iniciado (em Run > Debug), ele é aberto em uma nova janela, e você está pronto a iniciar a depuração.
Figura 2. Configurando a classe Java principal do projeto na configuração de depuração.
Em seguida, discutiremos algumas das práticas de depuração comuns no Eclipse.
Configurando pontos de interrupção
Ao iniciar o aplicativo para depuração, o Eclipse alterna para a perspectiva Debug automaticamente. Sem dúvidas que o procedimento de depuração mais comum é configurar pontos de interrupção que permitirão a inspeção de variáveis e valores dentro de instruções condicionais ou loops. Para configurar pontos de interrupção na visualização Package Explorer da perspectiva Java, clique duas vezes no arquivo do código de origem selecionado para abri-lo no editor. Percorra o código e posicione o cursor na barra de marcação (ao longo da borda esquerda da área do editor) na linha com o código suspeito. Clique duas vezes para definir o ponto de interrupção.
Figura 3. Dois marcadores de pontos de interrupção visíveis na margem esquerda do editor.
Agora, inicie a sessão de depuração no menu Run > Debug. É importante não colocar várias instruções em uma única linha porque não é possível depurar parcialmente ou definir pontos de interrupção de linhas em mais de uma instrução na mesma linha.
Figura 4. A visualização indica a linha atualmente em execução com seta na margem esquerda.
Também há uma visualização Breakpoints conveniente para gerenciar todos os pontos de interrupção.
Figura 5. Visualização Breakpoints.
Pontos de interrupção condicionais
Assim que identificar o local onde o erro está, você desejará saber o que o programa está fazendo certo antes de travar. Um modo de fazer isso é percorrer cada instrução no programa, um por vez, até atingir o ponto de preocupação. Algumas vezes, é melhor apenas executar uma seção de código e interromper a execução nesse ponto de modo que seja possível examinar os dados nesse local. É possível declarar pontos de interrupção condicionais acionados todas as vezes que o valor de uma expressão muda (veja a Figura 6). Em adição, o assistente de código está disponível quando você digita na expressão condicional.
Figura 6. Configurando o acionador de ponto de interrupção condicional.
Avaliando expressões
Para avaliar expressões no editor, na perspectiva Debug, selecione a linha inteira onde o ponto de interrupção está definido e, no menu de contexto, selecione a opção Inspect via Ctrl+Shift+I ou clicando com o botão direito do mouse na variável em que você está interessado (veja a Figura 7). A expressão é avaliada no contexto da estrutura de pilha atual, e os resultados são exibidos na visualização Expressions da janela Display.
Figura 7. Avaliando expressões com a opção Inspect.
Fazendo um scrapbook do seu código ativo
A visualização Display permite que você manipule código ativo em um scrapbook tipo fashion (veja a Figura 8). Para manipular uma variável, simplesmente digite o nome da variável na visualização Display, e você será saudado com um assistente de conteúdo familiar.
Figura 8. A visualização Display.
Quando o depurador para em um ponto de interrupção, é possível continuar a sessão do depurador selecionando a opção Step Over na barra de ferramentas da visualização Debug (veja a Figura 9). Isso ignora a linha de código destacada e continua a execução na próxima linha no mesmo método (ou continuará no método a partir do qual o método atual foi chamado). As variáveis que são alteradas como resultado da última etapa são destacadas em uma cor (o padrão é amarelo). As cores podem ser alteradas nas páginas de preferências da depuração.
Figura 9. Variáveis que mudam de cores.
Para suspender a execução dos encadeamentos na visualização Debug, selecione um encadeamento em execução e clique em Suspend na barra de ferramentas da visualização Debug. A pilha de chamadas atual para o encadeamento é exibida, e a linha atual da execução é destacada no editor na perspectiva Debug. Quando um encadeamento é suspenso, o cursor é colocado sobre uma variável no editor Java e o valor dessa variável é exibido em uma janela pequena de ajuda instantânea. Além disso, a estrutura de pilha superior do encadeamento é automaticamente selecionada, e as variáveis visíveis nessa estrutura de pilha são exibidas na visualização Variables. É possível examinar a variável apropriada na visualização Variables clicando no seu nome.
Hotswap Bug Fixing: correção imediata de código
Se estiver executando o Java Virtual Machine (JVM) V1.4 ou posterior, o Eclipse suporta um recurso denominado Hotswap Bug Fixing (não disponível na JVM V1.3 ou inferior). Ele permite a alteração do código de origem durante uma sessão do depurador, que é melhor que sair do aplicativo, alterar o código, recompilar e iniciar outra sessão de depuração. Para usar essa função, simplesmente mude o código no editor e retome a depuração. Esse recurso tornou-se disponível porque o JVM V1.4 é compatível com a Java Platform Debugger Architecture (JPDA). A JPDA implementa a capacidade de substituir código modificado em um aplicativo em execução. Evidentemente, isso é especialmente útil quando leva um longo tempo para iniciar o aplicativo ou para iniciar o aplicativo ou acessar o ponto onde ele falha.
Se o programa não tiver executado completamente quando a depuração estiver concluída, selecione a opção Terminate no menu de contexto, na visualização Debug. Um erro comum é usar Debug ou Run em vez de Resume enquanto estiver em uma sessão do depurador. Isso ativará outra sessão do depurador em vez de dar continuidade na sessão atual.
Depuração remota
O depurador do Eclipse oferece uma opção interessante para depurar aplicativos remotos. É possível conectar a uma VM remota executando um aplicativo Java e conectar a si mesmo ao aplicativo. Trabalhar com uma sessão de depuração remota é muito similar a depurar localmente. No entanto, uma configuração de depuração remota requer configurações diferentes na janela Run > Debug. É necessário primeiro selecionar a entrada Remote Java Application, na visualização esquerda, e clicar em New. Uma nova configuração de ativação remota é criada e três guias são mostradas: Connect, Source e Common.
No campo Project da guia Connect, selecione que projeto usar como uma referência para a ativação (para consulta de código de origem). No campo Host da guia Connect, digite o endereço IP ou nome do domínio do host remoto onde o programa Java está executando. No campo Port da guia Connect, digite a porta onde a VM remota está aceitando conexões. Geralmente, essa porta é especificada quando a VM remota é ativada. Selecione a opção Allow termination of remote VM quando quiser que o depurador determine se o comando Terminate estará disponível em uma sessão remota. Selecione essa opção para ter a possibilidade de terminar a VM à qual está se conectando. Agora, ao selecionar a opção Debug, o depurador tentará se conectar a uma VM remota no endereço e porta especificados, e o resultado será exibido na visualização Debug.
Se o ativador não for capaz de se conectar a uma VM no endereço especificado, uma mensagem de erro aparecerá. No geral, a disponibilidade da função de depuração remota depende estritamente da Java VM em execução no host remoto. A Figura 10 mostra a configuração das propriedades da conexão para uma sessão de depuração remota.
Figura 10. Configurando as propriedades da conexão para uma sessão de depuração remota.
Depurando outras linguagens
Embora a linguagem Java seja a mais usada no Eclipse, tal plataforma é extensível e pode suportar diversas outras. O Eclipse suporta C/C++ por meio do projeto C/C++ Development Tools (CDT). O CDT estende a visualização Debug do Eclipse com funções para depurar código C/C++, e a visualização CDT Debug permite que você gerencie a depuração de projetos C/C++ no ambiente de trabalho. O CDT não inclui seu depurador interno, mas oferece um front-end para o depurador GNU GDB, que deve estar disponível localmente. Há outros projetos como o PHP Development Tools (PDT) que oferecem seus respectivos depuradores (veja a Figura 11).
Figura 11. Depurador PHP.
Conclusão
O Eclipse Platform apresenta um depurador de linguagem Java integrado com a funcionalidade de depuração padrão, incluindo a capacidade de realizar execução por etapas, configurar pontos de interrupção e valores, inspecionar variáveis e valores, e suspender e retomar encadeamentos. É usado também para depurar aplicativos em execução em uma máquina remota. A plataforma Eclipse é principalmente um ambiente de desenvolvimento Java, mas a mesma visualização Eclipse Debug também está disponível para C/C++, PHP e diversas outras linguagens de programação.
Agradecimentos
Obrigado a Tyler Anderson por criar a Figura 11.
Recursos
Aprender
- Visite Eclipse.org para obter informações abrangentes sobre o programa e como utilizá-lo.
- Visite PlanetEclipse.org para ficar em sintonia com os acontecimentos na comunidade do Eclipse.
- Saiba sobre as ferramentas de desenvolvimento C/C++ em Projeto CDT no Eclipse.org. .
- Confira Ajax Tools Framework (ATF) flash page e a página do projeto para aprender sobre a depuração de JavaScript.
- Aprofunde-se na Estrutura de Depuração do Eclipse por meio deste tutorial EclipseCon.
- Confira “lista de leituras recomendadas do Eclipse.”
- Navegue em todo o conteúdo do Eclipse no developerWorks.
- Usuários novos no Eclipse devem examinar O Eclipse começa aqui.
- Expanda suas qualificações em Eclipse conferindo os recursos do projeto Eclipse.
- Para ouvir entrevistas e discussões interessantes para desenvolvedores de software, verifique os Podcasts do developerWorks.
- Para obter uma introdução à plataforma Eclipse, consulte “Getting started with the Eclipse Platform.”
- Fique por dentro dos eventos técnicos e webcasts do developerWorks .
- Verifique conferências, feiras, webcasts e outros eventos que estão para acontecer no mundo todo e que são do interesse de desenvolvedores de software livre da IBM.
- Visite a zona de software livre para obter extensas informações de instruções, ferramentas e atualizações de projeto para ajudar você a desenvolver com tecnologias de software livre e usá-las com produtos IBM.
Obter produtos e tecnologias
- Confira a mais recente downloads da tecnologia Eclipse no alphaWorks da IBM.
- Faça o download de Versões de avaliação de produto IBM e comece a usar ferramentas de desenvolvimento de aplicativo e produtos de middleware do DB2®, Lotus®, Rational®, Tivoli®eWebSphere®.
- Inove seu próximo projeto de desenvolvimento de software livre com o software de avaliação da IBM, disponível para download ou em DVD.
Discutir
- Confira Grupos de notícias do Eclipse CDT para obter ajuda de desenvolvimento sobre a depuração do C/C++. (Selecionar isso ativará o aplicativo do leitor de notícias Usenet padrão e abrirá o open eclipse.tools.cdt.)
- Confira Grupos de notícias do Eclipse ATF para obter ajuda de desenvolvimento sobre depuração do JavaScript. (Selecionar isso ativará o aplicativo do leitor de notícias Usenet padrão e abrirá o eclipse.webtools.atf.)
- Confira Newsgroup da Plataforma Eclipse para fazer perguntas sobre depuração e outras perguntas relacionadas à plataforma Eclipse. (A seleção deste link ativará seu aplicativo leitor de notícias Usenet padrão e abrirá eclipse.platform.)
- 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.
***
Nota do editor: O artigo a seguir foi escrito originalmente por Pawel Leszek, em maio de 2003, e atualizado em abril de 2007 por Chris Aniszczyk.
***
Sobre os autores:
- Chris Aniszczyk é um engenheiro de software na IBM Lotus cujo enfoque é desenvolvimento relacionado a OSGi. Entusiasta em software livre, trabalha na distribuição do Gentoo Linux e é committer em alguns projetos Eclipse (PDE, ECF, EMFT). Sempre está disponível para falar sobre software livre e o Eclipse, tomando uma bebida gelada.
- Pawel Leszek, um dos autores do Studio B, é consultor independente de software e autor especializado em arquitetura e administração do sistema Linux/Win/Mac OS. Tem experiência em muitos sistemas operacionais, linguagens de programação e protocolos de rede, especialmente Lotus Domino e DB2. Pawel também é o autor da série de artigos do “LinuxWorld” e é colunista do Linux na edição polonesa do “PC World.” Ele vive em Varsóvia com sua esposa e uma filha pequena adorável. Perguntas e comentários são bem-vindos; envie um email diretamente para pawel.leszek@ipgate.pl.