Tutorial: Depurar um aplicativo de console do .NET usando Visual Studio para Mac

Importante

A Microsoft anunciou a desativação do Visual Studio para Mac. O Visual Studio para Mac não terá mais suporte a partir de 31 de agosto de 2024. As alternativas incluem:

  • Visual Studio Code com o Kit de Desenvolvimento em C# e extensões relacionadas, como o .NET MAUI e o Unity.
  • Visual Studio em execução no Windows em uma VM no Mac.
  • Visual Studio em execução no Windows em uma VM na Nuvem.

Para obter mais informações, confira o comunicado de desativação do Visual Studio para Mac.

Este tutorial apresenta as ferramentas de depuração disponíveis no Visual Studio para Mac.

Pré-requisitos

Usar a configuração do build de depuração

Depuração e Lançamento são as configurações de build internas do Visual Studio. Você usa a configuração de build de depuração para depuração e a configuração de lançamento para a distribuição da versão final.

Na configuração de depuração, um programa é compilado com informações de depuração simbólicas e sem otimização. A otimização complica a depuração, porque a relação entre o código fonte e as instruções geradas é mais complexa. A configuração de versão de um programa não possui informações de depuração simbólica e é totalmente otimizada.

Por padrão, o Visual Studio para Mac usa a configuração de compilação de depuração, portanto, não é necessário alterá-la antes da depuração.

  1. Inicie o Visual Studio para Mac.

  2. Abra o projeto que você criou em Criar um aplicativo de console .NET usando o Visual Studio para Mac.

    A configuração de build atual é mostrada na barra de ferramentas. A seguinte imagem da barra de ferramentas mostra que o Visual Studio está configurado para compilar na versão de Depuração do aplicativo:

    Visual Studio toolbar with debug highlighted

Definir um ponto de interrupção

Um ponto de interrupção interrompe temporariamente a execução do aplicativo antes de a linha com o ponto de interrupção ser executada.

  1. Defina um ponto de interrupção na linha que exibe o nome, a data e a hora. Para fazer isso, posicione o cursor na linha de código e pressione \ (comando+\). Outra maneira de definir um ponto de interrupção é selecionando Depurar>Ativar/desativar pontos de interrupção no menu.

    O Visual Studio indica a linha na qual o ponto de interrupção é definido destacando-a e exibindo um ponto vermelho na margem esquerda.

    Visual Studio Program window with breakpoint set

  2. Pressione (comando+enter) para iniciar o programa no modo de depuração. Outra maneira de iniciar a depuração é escolhendo Depurar>Iniciar Depuração no menu.

  3. Digite uma cadeia de caracteres na janela do terminal quando o programa solicitar um nome e, em seguida, pressione Enter.

  4. A execução do programa para quando ele atinge o ponto de interrupção antes de o método Console.WriteLine ser executado.

    Screenshot of a breakpoint in Visual Studio

Usar a janela Imediata

A janela Imediata permite interagir com o aplicativo que você está depurando. Você pode alterar o valor das variáveis de maneira interativa para ver como isso afeta o programa.

  1. Se a janela Imediata não estiver visível, exiba-a escolhendo Exibir>Janelas de Depurar>Imediata.

  2. Insira name = "Gracie" na janela Imediato e pressione Enter.

  3. Digite currentDate = currentDate.AddDays(1) na janela Imediato e pressione Enter.

    A janela Imediata exibe o novo valor da variável de cadeia de caracteres e as propriedades do valor DateTime.

    Immediate Window in Visual Studio

    A janela Locais exibe os valores das variáveis que são definidas no método que está sendo executado no momento. Os valores das variáveis que você acabou de alterar são atualizados na janela Locais.

    Locals Window in Visual Studio

  4. Pressione (comando+enter) para continuar a depuração.

    Os valores exibidos no terminal também correspondem às alterações feitas na janela Imediata.

    Se o Terminal não foi exibido, selecione Terminal – HelloWorld na barra de navegação inferior.

    Terminal - Hello World in bottom navigation bar

  5. Pressione qualquer tecla para encerrar o programa.

  6. Feche a janela do terminal.

Definir um ponto de interrupção condicional

O programa exibe uma cadeia de caracteres que o usuário insere. O que acontecerá se o usuário não inserir nada? Isso pode ser testado com um recurso de depuração útil chamado ponto de interrupção condicional.

  1. ctrl-clique no ponto vermelho que representa o ponto de interrupção. No menu de contexto, selecione Editar ponto de interrupção.

  2. Na caixa de diálogo Editar ponto de interrupção, insira o código a seguir no campo após E a seguinte condição é verdadeira e selecione Aplicar.

    String.IsNullOrEmpty(name)
    

    Editor showing breakpoint settings panel

    Em todas as ocorrências do ponto de interrupção, o depurador chama o método String.IsNullOrEmpty(name) e ele é interrompido nessa linha somente quando a chamada do método retorna true.

    Em vez de uma expressão condicional, você pode especificar uma contagem de ocorrências, que interrompe a execução do programa antes que uma instrução seja executada um determinado número de vezes.

  3. Pressione (comando+enter) para iniciar a depuração.

  4. Na janela do terminal, pressione Enter quando solicitado a inserir seu nome.

    Como a condição especificada (name é null ou String.Empty) foi atendida, a execução do programa para quando ele chega no ponto de interrupção.

  5. Selecione a janela Locais, que mostra os valores das variáveis que são locais para o método em execução no momento. Nesse caso, Main é o método em execução no momento. Observe que o valor da variável name é "", ou seja, String.Empty.

  6. Também é possível ver se o valor é uma cadeia de caracteres vazia inserindo o nome da variável name na janela Imediata e pressionando Enter.

    Immediate window showing name is an empty string

  7. Pressione (comando+enter) para continuar a depuração.

  8. Na janela do terminal, pressione qualquer tecla para sair do programa.

  9. Feche a janela do terminal.

  10. Desmarque o ponto de interrupção clicando no ponto vermelho na margem esquerda da janela de código. Outra maneira de desmarcar um ponto de interrupção é escolhendo Depurar > Ativar/desativar pontos de interrupção enquanto a linha de código está selecionada.

Percorrer um programa

O Visual Studio também permite percorrer linha por linha de um programa e monitorar sua execução. Normalmente, você define um ponto de interrupção e segue o fluxo do programa em uma pequena parte do código do programa. Como esse programa é pequeno, você pode percorrer todo o programa.

  1. Defina um ponto de interrupção na chave que marca o início do método Main (pressione o comando+\).

  2. Pressione (comando+enter) para iniciar a depuração.

    O Visual Studio para na linha com o ponto de interrupção.

  3. Pressione I (shift+comando+I) ou selecione Depurar>Intervir para avançar uma linha.

    O Visual Studio realça e exibe uma seta ao lado da próxima linha de execução.

    Visual Studio step into method

    Neste ponto, a janela Locais mostra que a matriz args está vazia e name e currentDate têm valores padrão. Além disso, o Visual Studio abriu um terminal em branco.

  4. Pressione I (shift+comando+I).

    O Visual Studio destaca a instrução que inclui a atribuição de variável name. A janela Locais mostra que name é null, e o terminal exibe a cadeia de caracteres "Qual é o seu nome?".

  5. Responda à solicitação inserindo uma cadeia de caracteres na janela do console e pressionando Enter.

  6. Pressione I (shift+comando+I).

    O Visual Studio destaca a instrução que inclui a atribuição de variável currentDate. A janela Locais mostra o valor retornado pela chamada para o método Console.ReadLine. Terminal exibe a cadeia de caracteres inserida no prompt.

  7. Pressione I (shift+comando+I).

    A janela Locais mostra o valor da variável currentDate após a atribuição da propriedade DateTime.Now. O terminal permanece inalterado.

  8. Pressione I (shift+comando+I).

    O Visual Studio chama o método Console.WriteLine(String, Object, Object). O terminal exibe a cadeia de caracteres formatada.

  9. Pressione U (shift+comando+U) ou selecione Run>Depuração Circular.

    O terminal exibe uma mensagem e aguarda até que uma tecla seja pressionada.

  10. Pressione qualquer tecla para encerrar o programa.

Usar a configuração de build da Versão

Quando tiver testado a versão da depuração do seu aplicativo, você deverá compilar e testar a versão de lançamento. A versão de lançamento incorpora otimizações do compilador que podem afetar negativamente o comportamento de um aplicativo. Por exemplo, as otimizações de compilador que são projetadas para melhorar o desempenho podem criar condições de corrida em aplicativos multi-threaded.

Para compilar e testar a versão de Lançamento do aplicativo de console, execute as seguintes etapas:

  1. Altere a configuração de build na barra de ferramentas de Depuração para Lançamento.

    default Visual Studio toolbar with release highlighted

  2. Pressione (opção+comando+enter) para executar sem depuração.

Próximas etapas

Neste tutorial, você usou as ferramentas de depuração do Visual Studio. No próximo tutorial, você publicará uma versão implantável do aplicativo.