Partilhar via


Tutorial: Aprenda a depurar código C# usando o Visual Studio

Este artigo apresenta os recursos do depurador do Visual Studio em um passo a passo. Quando se depura o seu aplicativo, normalmente significa que está a executar o seu aplicativo com o depurador anexado. Quando você faz essa tarefa, o depurador fornece muitas maneiras de ver o que seu código está fazendo enquanto é executado. Podes analisar o teu código e ver os valores armazenados nas variáveis. Podes definir relógios nas variáveis para ver quando os valores mudam. Pode examinar o caminho de execução do seu código para ver se uma ramificação de código está a ser executada.

Se este artigo for a primeira vez que tenta depurar código, veja Debug para iniciantes absolutos. Se quiser uma visão mais abrangente das funcionalidades do depurador, consulte a Visão Geral do depurador Visual Studio.

Embora a aplicação de demonstração seja C#, a maioria das funcionalidades é aplicável a C++, Visual Basic, F#, Python, JavaScript e outras linguagens suportadas pelo Visual Studio. O F# não suporta Editar e continuar. F# e JavaScript não suportam a janela Autos . As capturas de tela estão em C#.

Neste tutorial, você irá:

  • Inicia o depurador e atinge os pontos de quebra
  • Aprenda comandos para percorrer o código no depurador
  • Inspecionar variáveis em dicas de dados e janelas do depurador
  • Examine a pilha de chamadas

Pré-requisitos

Deves ter o Visual Studio instalado e a tarefa de desenvolvimento de desktop .NET instalada.

Se precisares de instalar o Visual Studio, obtém-no gratuitamente nos downloads do Visual Studio.

Se já tens o Visual Studio, mas a carga de trabalho de desenvolvimento do desktop .NET não está instalada, vá a Ferramentas>Obter Ferramentas e Funcionalidades.... No Visual Studio Installer, escolha a carga de trabalho de desenvolvimento do desktop .NET, e depois escolha Modificar.

Criar um projeto

Primeiro, crie um projeto de aplicação de consola em C#/.NET. O modelo do projeto inclui todos os ficheiros de que precisas antes de adicionares qualquer coisa.

  1. Abra o Visual Studio. Se a janela de início não estiver aberta, selecione Arquivo>Janela de Início.

  2. Na janela Iniciar, selecione Criar um novo projeto.

  3. Na janela Criar um novo projeto, digite console na caixa de pesquisa. Em seguida, escolha C# na lista Idioma e, em seguida, escolha Windows na lista Plataforma.

    Depois de aplicar os filtros de idioma e plataforma, escolha o modelo Aplicativo de Console e selecione Avançar.

    Captura de ecrã do modelo 'Consola Application' na janela 'Criar um novo projeto' do Visual Studio.

    Observação

    Se não vir o modelo Aplicação de Consola, pode instalá-lo a partir da janela Criar um novo projeto. Na mensagem Não encontra o que procura?, escolha o link Instalar mais ferramentas e funcionalidades. Em seguida, no instalador do Visual Studio, escolha a carga de trabalho de desenvolvimento de desktop .NET .

  4. Na janela Configurar o seu novo projeto, digite GetStartedDebugging na caixa nome do projeto. Em seguida, selecione Avançar.

  5. Na janela de informação adicional , certifique-se de que o .NET 10.0 está selecionado no menu suspenso do Framework e depois selecione Criar.

  1. Abra o Visual Studio. Se a janela de início não estiver aberta, selecione Arquivo>Janela de Início.

  2. Na janela Iniciar, selecione Criar um novo projeto.

  3. Na janela Criar um novo projeto, digite console na caixa de pesquisa. Em seguida, escolha C# na lista Idioma e, em seguida, escolha Windows na lista Plataforma.

    Depois de aplicar os filtros de idioma e plataforma, escolha o modelo Aplicativo de Console e selecione Avançar.

    Captura de tela do modelo 'Aplicativo de console' na janela 'Criar um novo projeto' do Visual Studio 2022.

    Observação

    Se não vir o modelo de Aplicação Consola, pode instalá-lo a partir da janela Criar um novo projeto. Na mensagem Não encontra o que procura?, escolha o link Instalar mais ferramentas e funcionalidades. Em seguida, no instalador do Visual Studio, escolha a carga de trabalho de desenvolvimento de desktop .NET .

  4. Na janela Configurar o seu novo projeto, digite GetStartedDebugging na caixa nome do projeto. Em seguida, selecione Avançar.

  5. Na janela de Informações Adicionais , assegure-se de que o .NET 8.0 esteja selecionado no menu suspenso de Framework , e depois selecione Criar .

O Visual Studio abre seu novo projeto.

Criar o aplicativo

No Program.cs, substitua todo o código padrão pelo seguinte código:

using System;

class ArrayExample
{
   static void Main()
   {
      char[] letters = { 'f', 'r', 'e', 'd', ' ', 's', 'm', 'i', 't', 'h'};
      string name = "";
      int[] a = new int[10];
      for (int i = 0; i < letters.Length; i++)
      {
         name += letters[i];
         a[i] = i + 1;
         SendMessage(name, a[i]);
      }
      Console.ReadKey();
   }

   static void SendMessage(string name, int msg)
   {
      Console.WriteLine("Hello, " + name + "! Count to " + msg);
   }
}

Inicie o depurador!

Na maioria das vezes, este artigo utiliza atalhos de teclado. É uma maneira rápida de executar comandos de depuração. Comandos equivalentes, como comandos de barra de ferramentas ou menu, também estão disponíveis.

  1. Para iniciar o depurador, selecione F5, ou escolha o botão de destino de depuração na barra de ferramentas Padrão, ou escolha o botão Iniciar Depurar na barra de ferramentas Depurar, ou escolha Depurar >Iniciar Depuração na barra de menus.

    Captura de tela do botão Debug Target na barra de ferramentas Standard do Visual Studio 2022.

    F5 inicia a aplicação com o depurador anexado ao processo da aplicação. Desde que começaste a depurar, a aplicação é executada até ao final e vês os resultados no console.

    Hello, f! Count to 1
    Hello, fr! Count to 2
    Hello, fre! Count to 3
    Hello, fred! Count to 4
    Hello, fred ! Count to 5
    Hello, fred s! Count to 6
    Hello, fred sm! Count to 7
    Hello, fred smi! Count to 8
    Hello, fred smit! Count to 9
    Hello, fred smith! Count to 10
    
  2. Para parar o depurador, selecione Shift+F5, ou escolha o botão Parar Depuração na barra de ferramentas Depurar, ou escolha Depurar>Parar Depuração na barra de menus.

    Captura de tela do botão Parar depuração na barra de ferramentas Depurar do Visual Studio 2022.

  3. Na janela do console, selecione qualquer tecla para fechar a janela do console.

Definir um ponto de interrupção e iniciar o depurador

  1. No loop for da função Main, defina um ponto de interrupção clicando na margem esquerda na seguinte linha de código:

    name += letters[i];

    Um círculo vermelho aparece onde você define o ponto de interrupção.

    Captura de tela de um ponto de interrupção no Visual Studio 2022.

    Os pontos de interrupção são uma característica essencial da depuração confiável. Podes definir pontos de interrupção onde queres que o Visual Studio pause o teu código em execução. Podes olhar para os valores das variáveis ou para o comportamento da memória ou descobrir se um ramo de código é executado.

  2. Para iniciar a depuração, selecione F5ou escolha o botão Destino de Depuração na barra de ferramentas Padrão, ou escolha o botão Iniciar Depuração na barra de ferramentas Depuração ou escolha Depurar>Iniciar Depuração na barra de menus. O aplicativo é iniciado e o depurador é executado até a linha de código onde você define o ponto de interrupção.

    Captura de tela mostrando um ponto de interrupção no editor de código do Visual Studio 2022, com a execução de código pausada no ponto de interrupção.

    A seta amarela aponta para a instrução na qual o depurador fez uma pausa. A execução da aplicação pausa no mesmo ponto, com a instrução ainda não executada.

    Quando o aplicativo não está em execução, F5 inicia o depurador, que executa o aplicativo até atingir o primeiro ponto de interrupção. Se a aplicação estiver pausada num ponto de interrupção, o F5 continua a executá-la até atingir o próximo ponto de interrupção.

    Os pontos de interrupção são um recurso útil quando você conhece a linha ou seção de código que deseja examinar em detalhes. Para saber mais sobre os diferentes tipos de pontos de interrupção que pode definir, como pontos de interrupção condicionais, veja Usar o tipo certo de ponto de interrupção.

  1. Enquanto a execução de código é pausada na instrução name += letters[i], passe o mouse sobre a variável letters para ver uma dica de dados mostrando o tamanho da matriz e o tipo de elemento, char[10].

    Observação

    Um dos recursos mais úteis do depurador é sua capacidade de inspecionar uma variável. Muitas vezes, quando você está tentando depurar um problema, você está tentando descobrir se as variáveis têm valores que você espera em um determinado momento. Visualizar dicas de dados é uma boa maneira de verificar isso.

  2. Expanda a variável letters para exibir todos os seus elementos de matriz e seus valores.

    Captura de ecrã de uma dica de dados do depurador no Visual Studio 2022 que mostra os valores dos elementos da variável de matriz 'letras'.

  3. Passe o cursor sobre a variável name para ver seu valor atual, que é uma cadeia de caracteres vazia.

  4. Para avançar o depurador para a próxima instrução, selecione F10 ou escolha o botão Step Over na barra de ferramentas Depurar ou escolha Depurar>Step Over na barra de menus. Selecione F10 mais duas vezes para passar pela chamada de método SendMessage.

    F10 avança o depurador sem entrar em funções ou métodos, embora o seu código ainda seja executado. Desta forma, ignoraste a depuração do código no SendMessage método, o que não é relevante neste momento.

  5. Para iterar pelo loop de for algumas vezes, selecione F10 repetidamente. Durante cada iteração de loop, pause no ponto de interrupção e passe o mouse sobre a variável name para verificar seu valor na dica de dados.

    Captura de tela de uma dica de dados do depurador no Visual Studio 2022 que mostra o valor da cadeia de caracteres para a variável 'name'.

    O valor da variável muda a cada iteração do loop de for, mostrando valores de f, depois fr, depois free assim por diante. Para avançar o depurador pelo loop mais rapidamente, selecione F5, que avança para o seu ponto de interrupção em vez da próxima instrução.

  6. Enquanto a execução do código estiver pausada no loop de for do método Main, selecione F11ou escolha o botão Step Into na barra de ferramentas de Depuração, ou escolha Depurar>Step Into na barra de menus, até chegar à chamada do método SendMessage.

    O depurador deverá estar pausado nesta linha de código:

    SendMessage(name, a[i]);

  7. Para entrar no método SendMessage, selecione F11 novamente.

    O ponteiro amarelo avança para o método SendMessage.

    Captura de ecrã mostrando o ponteiro de execução do depurador dentro do método 'SendMessage'.

    F11 ajuda você a examinar o fluxo de execução do seu código com mais profundidade. Para entrar em um método a partir de uma chamada de método, selecione F11. Por padrão, o depurador evita entrar em métodos não pertencentes ao utilizador. Para saber mais sobre como depurar código de não-usuário, consulte Just My Code.

    Depois de terminar de depurar o método SendMessage, está pronto para regressar ao loop for do método main.

  8. Para sair do método SendMessage, selecione Shift+F11, escolha o botão Sair na barra de ferramentas Depurar ou escolha Depurar>Sair na barra de menus.

    Step out retoma a execução do aplicativo e avança o depurador até que o método ou função atual retorne.

    Você vê novamente o ponteiro amarelo no loop for do método Main, pausado na chamada do método SendMessage. Para obter mais informações sobre diferentes maneiras de percorrer o seu código, consulte Navegar no código com o depurador.

  1. Selecione F5 para avançar para o ponto de interrupção novamente.

  2. No editor de códigos, passe o rato sobre a chamada do método Console.WriteLine no método SendMessage até que o botão Executar com clique apareça. A dica de ferramenta para o botão mostra "Executar até aqui".

    Captura de ecrã mostrando o botão Executar ao clicar no Visual Studio 2022.

  3. Escolha o botão Executar para clicar. Como alternativa, com o cursor na instrução Console.WriteLine, selecione Ctrl+F10. Ou clique com o botão direito do mouse na chamada do método Console.WriteLine, e escolha Executar até o Cursor no menu de contexto.

    O depurador avança para a chamada de método Console.WriteLine.

    Usar o botão Executar até clicar é semelhante à definição de um ponto de interrupção temporário. Esta abordagem é útil para se deslocar rapidamente numa região visível do código da sua aplicação num ficheiro aberto.

Reinicie seu aplicativo rapidamente

Para executar novamente seu aplicativo desde o início no depurador, selecione Ctrl+Shift+F5, escolha o botão Reiniciar na barra de ferramentas Depurar ou escolha Depurar>Reiniciar na barra de menus.

Captura de tela do botão Reiniciar na barra de ferramentas Depurar do Visual Studio 2022.

Reiniciar interrompe o depurador e depois reinicia-o, num só passo. Quando o depurador é reiniciado, ele é executado até o primeiro ponto de interrupção, que é o ponto de interrupção definido anteriormente dentro do loop de for e, em seguida, pausa.

Inspecione variáveis com as janelas Autos e Locais

As janelas Autos e Locals mostram valores variáveis enquanto se está a depurar. As janelas só estão disponíveis durante uma sessão de depuração. A janela Autos mostra as variáveis usadas na linha atual onde o depurador está e na linha que a precede. A janela Locals mostra variáveis definidas no escopo local, que geralmente é a função ou método atual.

  1. Enquanto o depurador está pausado, veja a janela Autos na parte inferior do editor de código.

    Se a janela Autos estiver fechada, selecione Ctrl+D, Aou escolha Depurar>Windows>Autos na barra de menus.

  2. Com o depurador ainda pausado, veja a janela Locais numa aba ao lado da janela Automáticos.

    Se a janela Locais estiver fechada, selecione Ctrl+D, Lou escolha Debug>Windows>Locais.

  3. Na janela Locais, expanda a variável letters para ver os seus elementos do vetor e os seus valores.

    Captura de tela da janela Locais no Visual Studio 2022, com a variável de matriz 'letras' expandida.

Para mais informações sobre as janelas Autos e Locais , veja Inspecionar variáveis e valores de retorno.

Ajustar o relógio / Definir um vigia

Podes especificar uma variável, ou uma expressão, que queiras acompanhar enquanto avanças no código, adicionando-a à janela do Relógio .

  1. Enquanto o depurador estiver pausado, clique com o botão direito do rato na variável name e escolha Adicionar à Monitorização.

    A janela do Relógio abre-se, por defeito, no fundo do editor de código.

  2. Depois de definires o relógio na name variável, percorre o teu código para veres o valor da name variável mudar a cada for iteração do ciclo.

    Ao contrário das outras janelas variáveis, a janela Watch sempre mostra as variáveis que está a observar. As variáveis que estão fora do escopo são exibidas como indisponíveis.

Para obter mais informações sobre a janela de observação , consulte Variáveis de observação com janelas de observação .

Examine a pilha de chamadas

O Call Stack pode ajudá-lo a compreender o fluxo de execução da sua aplicação. Mostra a ordem em que os métodos e funções são chamados.

  1. Enquanto o depurador está pausado no loop for, veja a janela Call Stack, que se abre por padrão no canto inferior direito do painel do editor de código.

    Se a janela Pilha de Chamadas estiver fechada, selecione Ctrl+D, Cou escolha Depurar>Windows>Pilha de Chamadas na barra de menus.

    Na janela Call Stack, você vê o ponteiro amarelo no método Main atual.

  2. Selecione F11 várias vezes até que veja a pausa do depurador no método SendMessage.

    A linha superior da janela Call Stack mostra a função atual, que é o método SendMessage. A segunda linha mostra que o método SendMessage foi chamado a partir do método Main.

    Captura de ecrã da janela Pilha de chamadas no Visual Studio 2022.

    Observação

    A janela Call Stack é semelhante à perspetiva Debug em alguns IDEs, como o Eclipse.

    Na janela Call Stack, pode-se clicar duas vezes numa linha de código para ir para o código-fonte correspondente, isso altera o escopo atual em inspeção pelo depurador. Esta ação não avança o depurador.

    Você também pode usar os menus de clique com o botão direito na janela de pilha de chamadas para fazer outras coisas. Por exemplo, você pode inserir pontos de interrupção em funções especificadas, avançar o depurador usando Executar para Cursorou ir para o código-fonte.

Para mais informações sobre o Call Stack, veja Ver o stack de chamadas.

Próximo passo

Neste tutorial, aprendeste a iniciar o depurador, passar pelo código e inspecionar variáveis. Você pode querer ter uma visão de alto nível dos recursos do depurador, juntamente com links para mais informações.