Exercício – Definir pontos de interrupção

Concluído

Os pontos de interrupção são usados para pausar a execução durante o processo de depuração. Isso permite que você acompanhe as variáveis e examine a sequência na qual o código é executado. Os pontos de interrupção são uma excelente maneira de iniciar o processo de depuração.

Definir um ponto de interrupção

Anteriormente neste módulo, você concluiu um exercício em que executou um aplicativo no depurador. O aplicativo exibia "mensagens de saudação" no painel CONSOLE DEBUG. No final do exercício, você notou que o código repete a saudação de Andrew de uma maneira inesperada.

Neste exercício, você usará um ponto de interrupção para ajudar a identificar o problema.

  1. Verifique se o arquivo Program.cs contém o seguinte exemplo de código:

    /* 
    This code uses a names array and corresponding methods to display
    greeting messages
    */
    
    string[] names = new string[] { "Sophia", "Andrew", "AllGreetings" };
    
    string messageText = "";
    
    foreach (string name in names)
    {
        if (name == "Sophia")
            messageText = SophiaMessage();
        else if (name == "Andrew")
            messageText = AndrewMessage();
        else if (name == "AllGreetings")
            messageText = SophiaMessage();
            messageText = messageText + "\n\r" + AndrewMessage();
    
        Console.WriteLine(messageText + "\n\r");
    }
    
    bool pauseCode = true;
    while (pauseCode == true);
    
    static string SophiaMessage()
    {
        return "Hello, my name is Sophia.";
    }
    
    static string AndrewMessage()
    {
        return "Hi, my name is Andrew. Good to meet you.";
    }
    
  2. Use as ferramentas do depurador do Visual Studio Code para definir um ponto de interrupção na primeira linha de código dentro do foreach loop.

    Captura de tela mostrando um ponto de interrupção no código.

    Dica

    Uma opção fácil para ativar/desativar um ponto de interrupção é selecionar (clique à esquerda) a área à esquerda do número de linha. Os pontos de interrupção também podem ser definidos usando o Run menu e usando atalhos de teclado.

  3. No menu Executar, selecione Iniciar Depuração.

  4. Observe que a execução de código pausa no ponto de interrupção e que a linha de código atual está realçada no Editor.

    Captura de tela mostrando a execução de código pausada em um ponto de interrupção.

  5. Na barra de ferramentas Controles de depuração , selecione Entrar.

    Você pode passar o ponteiro do mouse sobre os botões na barra de ferramentas de controles de depuração para exibir os rótulos de botão.

  6. Observe que a execução de código avança para a seguinte linha de código e pausa:

    messageText = SophiaMessage();
    

    Essa linha de código atribui o valor retornado do SophiaMessage método à variável de cadeia de caracteres messageText.

  7. Reserve um momento para considerar por que selecionar Step Into produziu esse resultado.

    • O botão Intervir é usado para avançar para a próxima instrução executável.
    • Como o primeiro elemento no names array é Sophia e a instrução if está verificando o nome Sophia, a expressão resulta em true e a execução do código é movida para o bloco de código da instrução if.
  8. Na barra de ferramentas Controles de depuração , selecione Entrar.

  9. Observe que a execução de código avança para o SophiaMessage método e pausa.

    O botão Entrar avançou para a próxima linha de código executável. A próxima linha de código executável não é o número da próxima linha no arquivo, é a próxima instrução no caminho de execução. Nesse caso, a próxima instrução executável é o ponto de entrada para o SophiaMessage método.

  10. Na barra de ferramentas Controles de depuração, selecione Depuração circular.

  11. Observe que a execução de código retorna à linha de código que chamou o SophiaMessage método e pausa.

  12. Reserve um momento para considerar por que a seleção de Step Out produziu esse resultado.

    Quando dentro de um método, o botão Sair conclui as linhas restantes do método atual e retorna ao contexto de execução que invocou o método.

  13. Na barra de ferramentas Controles de depuração , selecione Entrar.

  14. Observe que a execução de código avança para a seguinte linha de código e pausa:

    messageText = messageText + "\n\r" + AndrewMessage();
    
  15. Reserve um momento para considerar por que a execução avançou para essa linha de código.

    Embora o recuo de código implique que essa linha de código faz parte do bloco de código da instrução else if, isso não é verdadeiro. O uso de chaves para definir os blocos de código {} para essa estrutura if - else if teria ajudado a evitar esse bug. Conforme o código for escrito, a mensagem de Alberto será adicionada a messageText cada vez que o loop iterar.

Verificar as atualizações de código

Depois de isolar um problema no código, atualize o código e verifique se o problema foi corrigido.

  1. Na barra de ferramentas de controles de depuração , selecione Parar.

  2. Leve um minuto para corrigir sua lógica de código.

    Você tem algumas opções para corrigir o problema identificado em seu código. Por exemplo:

    • Você pode manter as linhas de código existentes e adicionar chaves {} à estrutura if para cada bloco de código.

    • Você pode mesclar as duas linhas de código que seguem a instrução final else if , formando uma única instrução da seguinte maneira:

      else if (name == "AllGreetings")
          messageText = SophiaMessage() + "\n\r" + AndrewMessage();
      

    De qualquer forma, o código atualizado precisa incluir a chamada a AndrewMessage no bloco de código quando name == "AllGreetings".

  3. No menu Arquivo, selecione Salvar.

  4. Use as ferramentas de interface do usuário do depurador para limpar o ponto de interrupção que você definiu anteriormente.

  5. No menu Executar, selecione Iniciar Depuração.

  6. Verifique se o código agora produz os resultados esperados.

    Hello, my name is Sophia.
    
    Hi, my name is Andrew. Good to meet you.
    
    Hello, my name is Sophia.
    Hi, my name is Andrew. Good to meet you.
    
  7. Na barra de ferramentas de controles de depuração, selecione Parar.

Parabéns! Você usou com êxito o depurador do Visual Studio Code para isolar e corrigir uma questão de lógica.

Recapitulação

Estes são alguns pontos importantes desta unidade que você deve se lembrar:

  • Use pontos de interrupção para pausar a execução de código durante uma sessão de depuração.
  • Use Intervir na barra de ferramentas Controles de depuração para observar a próxima linha de código executável.
  • Use Depuração circular da barra de ferramentas Controles de depuração para avançar pelo método atual e voltar à linha de código que chamou o método.