GWT - Aplicativo de Depuração

O GWT fornece excelente capacidade de depurar código do lado do cliente e também do lado do servidor.

Durante o modo de desenvolvimento, o aplicativo GWT é baseado em código Java e não é traduzido para JavaScript.

Quando um aplicativo está sendo executado no modo de desenvolvimento, a Java Virtual Machine (JVM) está realmente executando o código do aplicativo como bytecode Java compilado, usando o recurso GWT para se conectar a uma janela do navegador.

O GWT usa um plugin baseado em navegador para se conectar à JVM.

Portanto, os desenvolvedores estão livres para usar qualquer IDE baseado em Java para depurar o código GWT do lado do cliente e o código do lado do servidor.

Neste artigo, demonstraremos o uso da depuração do código do cliente GWT usando o Eclipse. Faremos as seguintes tarefas -

  • Defina pontos de interrupção no código e veja-os no BreakPoint Explorer.
  • Percorra o código linha por linha durante a depuração.
  • Veja os valores da variável.
  • Inspecione os valores de todas as variáveis.
  • Inspecione o valor de uma expressão.
  • Exibe o quadro de pilha para threads suspensos.

Exemplo de depuração

Este exemplo o levará por etapas simples para demonstrar a depuração de um aplicativo GWT. Siga as etapas a seguir para atualizar o aplicativo GWT que criamos no GWT - capítulo Criar aplicativo -

Degrau Descrição
1 Crie um projeto com o nome HelloWorld em um pacote com.tutorialspoint conforme explicado no capítulo GWT - Criar aplicativo .
2 Modifique HelloWorld.gwt.xml , HelloWorld.css , HelloWorld.html e HelloWorld.java conforme explicado abaixo. Mantenha o resto dos arquivos inalterados.
3 Compile e execute o aplicativo para verificar o resultado da lógica implementada.

A seguir está o conteúdo do descritor do módulo modificado src/com.tutorialspoint/HelloWorld.gwt.xml.

<?xml version = "1.0" encoding = "UTF-8"?>
<module rename-to = 'helloworld'>
   <!-- Inherit the core Web Toolkit stuff.                        -->
   <inherits name = 'com.google.gwt.user.User'/>

   <!-- Inherit the default GWT style sheet.                       -->
   <inherits name = 'com.google.gwt.user.theme.clean.Clean'/>

   <!-- Specify the app entry point class.                         -->
   <entry-point class = 'com.tutorialspoint.client.HelloWorld'/>

   <!-- Specify the paths for translatable code                    -->
   <source path = 'client'/>
   <source path = 'shared'/>

</module>

A seguir está o conteúdo do arquivo de folha de estilo modificado war/HelloWorld.css.

body {
   text-align: center;
   font-family: verdana, sans-serif;
}

h1 {
   font-size: 2em;
   font-weight: bold;
   color: #777777;
   margin: 40px 0px 70px;
   text-align: center;
}

.gwt-Label{ 
   font-size: 150%; 
   font-weight: bold;
   color:red;
   padding:5px;
   margin:5px;
}

A seguir está o conteúdo do arquivo host HTML modificado war/HelloWorld.html para acomodar dois botões.

<html>
   <head>
      <title>Hello World</title>
      <link rel = "stylesheet" href = "HelloWorld.css"/>
      <script language = "javascript" src = "helloworld/helloworld.nocache.js">
      </script>
   </head>

   <body>
      <h1>Debugging Application Demonstration</h1>
      <div id = "gwtContainer"></div>
   </body>
</html>

Vamos ter o seguinte conteúdo do arquivo Java src/com.tutorialspoint/HelloWorld.java usando o qual iremos demonstrar a capacidade de depuração do Código GWT.

package com.tutorialspoint.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DecoratorPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

public class HelloWorld implements EntryPoint {
	
   public void onModuleLoad() {
      /*create UI */
      final TextBox txtName = new TextBox(); 
      txtName.setWidth("200");
      txtName.addKeyUpHandler(new KeyUpHandler() {
         @Override
         public void onKeyUp(KeyUpEvent event) {
            if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER){
               Window.alert(getGreeting(txtName.getValue()));
            }				
         }
      });
      Label lblName = new Label("Enter your name: ");

      Button buttonMessage = new Button("Click Me!");

      buttonMessage.addClickHandler(new ClickHandler() {			
      @Override
      public void onClick(ClickEvent event) {
         Window.alert(getGreeting(txtName.getValue()));
      }});

      HorizontalPanel hPanel = new HorizontalPanel();	
      hPanel.add(lblName);
      hPanel.add(txtName);
      hPanel.setCellWidth(lblName, "130");

      VerticalPanel vPanel = new VerticalPanel();
      vPanel.setSpacing(10);
      vPanel.add(hPanel);
      vPanel.add(buttonMessage);
      vPanel.setCellHorizontalAlignment(buttonMessage, 
      HasHorizontalAlignment.ALIGN_RIGHT);

      DecoratorPanel panel = new DecoratorPanel();
      panel.add(vPanel);

      // Add widgets to the root panel.
      RootPanel.get("gwtContainer").add(panel);
   }  
   
   public String getGreeting(String name){
      return "Hello "+name+"!";
   }
}

Etapa 1 - Coloque BreakPoints

Coloque um ponto de interrupção na primeira linha de onModuleLoad() de HelloWorld.java

Etapa 2 - Depurar aplicativo

Agora clique no menu do aplicativo de depuração e selecioneHelloWorld aplicativo para depurar o aplicativo.

Se tudo estiver bem, você deve ver o modo de desenvolvimento GWT ativo no Eclipse contendo uma URL conforme mostrado abaixo. Clique duas vezes no URL para abrir o aplicativo GWT.

Assim que o aplicativo for iniciado, você verá o foco no ponto de interrupção do Eclipse, pois colocamos o ponto de interrupção na primeira linha do método de ponto de entrada.

Você pode ver o rastreamento de pilha para threads suspensos.

Você pode ver os valores das expressões.

Você pode ver a lista de pontos de interrupção colocados.

Agora continue pressionando F6 até chegar à última linha do método onModuleLoad (). Como referência para as teclas de função, F6 inspeciona o código linha por linha, F5 dá um passo adiante e F8 retoma o aplicativo. Agora você pode ver a lista de valores de todas as variáveis ​​do método onModuleLoad ().

O código do cliente GWT pode ser depurado da mesma forma que um aplicativo Java pode ser depurado. Coloque pontos de interrupção em qualquer linha e brinque com os recursos de depuração do GWT.