Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo apresenta os recursos do depurador do Visual Studio em um passo a passo. Se você quiser uma exibição de nível superior dos recursos do depurador, consulte Primeiro examinar o depurador. Quando você depura seu aplicativo, isso geralmente significa que você está executando seu aplicativo com o depurador anexado. Quando você faz essa tarefa, o depurador fornece várias maneiras de ver o que seu código está fazendo enquanto ele é executado. Você pode percorrer seu código e examinar os valores armazenados em variáveis, definir relógios em variáveis para ver quando os valores são alterados, examinar o caminho de execução do código, ver se um branch de código está em execução e assim por diante. Se este exercício for a primeira vez que você está tentando depurar código, você pode querer ler depuração para iniciantes absolutos antes de passar por este artigo.
Embora o aplicativo de demonstração seja C#, a maioria dos recursos é aplicável a C++, Visual Basic, F#, Python, JavaScript e outras linguagens compatíveis com o Visual Studio (F# não dá suporte a Editar e continuar. F# e JavaScript não dão suporte à janela de Autos ). As capturas de tela estão em C#.
Neste tutorial, você irá:
- Inicie o depurador e atinja pontos de interrupção.
- Aprender os comandos para percorrer o código no depurador
- Inspecionar variáveis em dicas de dados e janelas do depurador
- Examinar a pilha de chamadas
Pré-requisitos
Você deve ter o Visual Studio 2022 instalado e o workload do .NET para desenvolvimento de aplicativos de área de trabalho.
Você deve ter o Visual Studio 2019 instalado e a carga de trabalho de desenvolvimento multiplataforma do .NET Core .
Se você ainda não instalou o Visual Studio, acesse a página downloads do Visual Studio para instalá-lo gratuitamente.
Se você precisar instalar a carga de trabalho, mas já tiver o Visual Studio, vá para Ferramentas>Obter Ferramentas e Recursos..., que abre o Instalador do Visual Studio. O Visual Studio Installer é iniciado. Escolha a carga de trabalho de desenvolvimento entre plataformas do .NET Core e escolha Modificar.
Se você já tiver o Visual Studio, mas a carga de trabalho de desenvolvimento da área de trabalho do .NET não estiver instalada, vá para Ferramentas>Obter Ferramentas e Recursos..., que inicia o Instalador do Visual Studio. No Instalador do Visual Studio, selecione o workload de desenvolvimento de área de trabalho do .NET e escolha Modificar.
Criar um projeto
Primeiro, você cria um projeto de aplicativo de console do .NET Core. O tipo de projeto vem com todos os arquivos de modelo necessários, antes mesmo de adicionar qualquer coisa!
Abra o Visual Studio. Se a janela inicial não estiver aberta, selecioneJanela Iniciar>.
Na janela inicial, selecione Criar um novo projeto.
Na janela Criar um novo projeto , insira o console na caixa de pesquisa. Em seguida, escolha C# na lista De idiomas e escolha o Windows na lista plataforma.
Depois de aplicar os filtros de linguagem e plataforma, escolha o modelo de Aplicativo de Console para .NET Core e selecione Avançar.
Observação
Se você não vir o modelo Aplicativo Console, poderá instalá-lo na janela Criar um novo projeto. Na mensagem Não encontrar o que você está procurando? Escolha o link Instalar mais ferramentas e recursos . Em seguida, no Instalador do Visual Studio, escolha a carga de trabalho de desenvolvimento multiplataforma do .NET Core .
Na janela Configurar seu novo projeto , insira GetStartedDebugging na caixa de nome do Projeto . Em seguida, selecione Avançar.
Selecione a estrutura de destino recomendada (suporte ao .NET 8.0 ou a longo prazo) e selecione Criar.
Na janela Criar um novo projeto , insira o console na caixa de pesquisa. Em seguida, escolha C# na lista De idiomas e escolha o Windows na lista plataforma.
Depois de aplicar os filtros de linguagem e plataforma, escolha o modelo de Aplicativo de Console e selecione Avançar.
Observação
Se você não vir o modelo de Aplicativo de Console , poderá instalá-lo na janela Criar um novo projeto . Na mensagem Não encontrar o que você está procurando? Escolha o link Instalar mais ferramentas e recursos . Em seguida, no Instalador do Visual Studio, escolha a carga de trabalho de desenvolvimento da área de trabalho do .NET .
Na janela Configurar seu novo projeto , insira GetStartedDebugging na caixa de nome do Projeto . Em seguida, selecione Avançar.
Na janela Informações adicionais , verifique se o .NET 8.0 está selecionado no menu suspenso da Estrutura e selecione Criar.
O Visual Studio abre seu novo projeto.
Criar o aplicativo
Em 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!
Pressione F5 (Depurar > Iniciar Depuração) ou o botão Iniciar Depuração
na barra de ferramentas de depuração.F5 inicia o aplicativo com o depurador anexado ao processo, mas no momento não tomamos medidas especiais para examinar o código. Então, o aplicativo simplesmente carrega e você vê essa saída do 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 10Neste tutorial, você examinará melhor este aplicativo usando o depurador e verá os recursos do depurador.
Pare o depurador pressionando o botão de parada vermelha (Shift + F5).
Na janela do console, pressione uma tecla para fechar a janela do console.
Principalmente, usamos atalhos de teclado aqui, porque é uma maneira rápida de executar comandos do debugger. Comandos equivalentes, como comandos de menu ou barra de ferramentas, também são mencionados.
Para iniciar o depurador, selecione F5 ou escolha o botão Depurar Destino na barra de ferramentas Padrão ou escolha o botão Iniciar Depuração na barra de ferramentas Depurar ou escolha Depurar>Iniciar Depuração na barra de menus.
F5 inicia o aplicativo com o depurador conectado ao processo do aplicativo. Como não fizemos nada especial para examinar o código, o aplicativo é executado até a conclusão e você vê a saída do 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 10Para interromper o depurador, selecione Shift+F5 ou escolha o botão Parar Depuração na barra de ferramentas de Depuração ou escolha Depurar>Parar Depuração na barra de menus.
Na janela do console, selecione qualquer chave para fechar a janela do console.
Definir um ponto de interrupção e iniciar o depurador
forNo loop daMainfunção, defina um ponto de interrupção clicando na margem esquerda na seguinte linha de código:name += letters[i];Uma
aparece onde você define o ponto de interrupção.Pontos de interrupção são um dos recursos mais básicos e essenciais de uma depuração confiável. Um ponto de interrupção indica onde o Visual Studio deve suspender o código em execução para que você possa dar uma olhada nos valores das variáveis ou no comportamento da memória ou se um branch de código está sendo executado ou não.
Pressione F5 ou o botão Iniciar Depuração .
O aplicativo é iniciado e o depurador é executado na linha de código em que você define o ponto de interrupção.
A seta amarela representa a instrução na qual o depurador fez uma pausa, que também suspende a execução do aplicativo no mesmo ponto (essa instrução ainda não foi executada).
Se o aplicativo ainda não estiver em execução, F5 iniciará o depurador e para no primeiro ponto de interrupção. Caso contrário, F5 continua executando o aplicativo até o próximo ponto de parada.
Pontos de interrupção são um recurso útil quando você conhece a linha de código ou a seção de código que deseja examinar em detalhes. Para obter informações sobre os diferentes tipos de pontos de interrupção que você pode definir, como pontos de interrupção condicionais, consulte Usando pontos de interrupção.
forNo loop daMainfunção, defina um ponto de interrupção clicando na margem esquerda na seguinte linha de código:name += letters[i];Um círculo vermelho é exibido onde você define o ponto de interrupção.
Pontos de interrupção são um recurso essencial da depuração confiável. Você pode definir pontos de interrupção em que deseja que o Visual Studio pause o código em execução para que possa examinar os valores das variáveis ou o comportamento da memória ou saber se um branch de código está sendo executado ou não.
Para iniciar a depuração, selecione F5 ou escolha o botão Depurar Destino na barra de ferramentas Standard ou escolha o botão Iniciar Depuração na barra de ferramentas Depurar ou escolha Depurar>Iniciar Depuração na barra de menus. O aplicativo é iniciado e o depurador é executado na linha de código em que você definiu o ponto de interrupção.
A seta amarela aponta para a instrução na qual o depurador fez uma pausa. A execução do aplicativo é pausada no mesmo ponto, com a instrução ainda não executada.
Quando o aplicativo não está em execução, o F5 inicia o depurador, que executa o aplicativo até chegar ao primeiro ponto de interrupção. Se o aplicativo estiver em pausa em um ponto de interrupção, f5 continuará executando o aplicativo até chegar ao próximo ponto de interrupção.
Pontos de interrupção são um recurso útil quando você conhece a linha ou a seção de código que deseja examinar em detalhes. Para obter mais informações sobre os diferentes tipos de pontos de interrupção que você pode definir, como pontos de interrupção condicionais, consulte Como usar pontos de interrupção.
Navegar pelo código e inspecionar dados usando dicas de dados
Principalmente, usamos os atalhos de teclado aqui, pois é uma boa maneira de obter rapidez na execução do aplicativo no depurador (comandos equivalentes, como comandos de menu, são mostrados entre parênteses).
Enquanto a
name += letters[i]execução de código é pausada na instrução, passe o mouse sobre alettersvariável e você verá seu valor padrão, o valor do primeiro elemento na matrizchar[10].Os recursos que permitem inspecionar variáveis são um dos recursos mais úteis do depurador e há diferentes maneiras de fazer isso. Muitas vezes, ao tentar depurar um problema, você está tentando descobrir se as variáveis estão armazenando os valores que você espera que eles tenham em um determinado momento.
Expanda a
lettersvariável para ver suas propriedades, que incluem todos os elementos que a variável contém.
Em seguida, passe o mouse sobre a
namevariável e você verá seu valor atual, uma cadeia de caracteres vazia.Pressione F10 (ou escolha Depurar > Passar por cima) duas vezes para avançar até a chamada do método
SendMessage, e então pressione F10 mais uma vez.F10 avança o depurador para a próxima instrução sem entrar em funções ou métodos no código do aplicativo (o código ainda é executado). Pressionando F10 na chamada do método
SendMessage, nós ignoramos o código de implementação paraSendMessage(no qual talvez não estejamos interessados no momento).Pressione F10 (ou Depurar>Passo a Passo) algumas vezes para iterar várias vezes pelo
forloop, pausando novamente no ponto de interrupção e passando o mouse sobre anamevariável sempre para verificar seu valor.
O valor da variável muda com cada iteração do
forloop, mostrando valores def, em seguidafr, efreassim por diante. Para avançar o depurador pelo loop mais rapidamente neste cenário, você pode pressionar F5 (ou escolher Depurar>Continuar), o que avança para o ponto de interrupção em vez da próxima instrução.Muitas vezes, ao depurar, você deseja uma maneira rápida de verificar valores de propriedade em variáveis, para ver se eles estão armazenando os valores que você espera que eles armazenem e as dicas de dados são uma boa maneira de fazer isso.
Enquanto a execução de código permanece pausada no loop do método
Main, pressione F11 (ou escolha Depurar > Entrar) até pausar na chamada do métodoSendMessage.Você deve estar nessa linha de código:
SendMessage(name, a[i]);Pressione F11 mais uma vez para entrar no
SendMessagemétodo.O ponteiro amarelo avança para o
SendMessagemétodo.
F11 é o comando Intervir, que avança a execução do aplicativo uma instrução por vez. F11 é uma boa maneira de examinar o fluxo de execução com mais detalhes. Por padrão, o depurador ignora o código nonuser (se você quiser mais detalhes, consulte Just My Code).
Digamos que você terminou de examinar o método
SendMessagee deseja sair do método, mas permanecer no depurador. Você pode fazer isso usando o comando Step Out .Pressione Shift + F11 (ou Depurar > Passo para Fora).
Esse comando retoma a execução do aplicativo (e avança o depurador) até que o método ou função atual retorne.
Você deve voltar para o loop
forno métodoMain, pausado na chamada do métodoSendMessage. Para obter mais informações sobre diferentes maneiras de percorrer seu código, consulte Navegar código no depurador.
Enquanto a execução de código é pausada na
name += letters[i]instrução, passe o mouse sobre alettersvariável 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 é a 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. Exibir dicas de dados é uma boa maneira de verificar isso.
Expanda a
lettersvariável para exibir todos os seus elementos de matriz e seus valores.
Passe o mouse sobre a
namevariável para ver seu valor atual, que é uma cadeia de caracteres vazia.Para avançar o depurador para a próxima instrução, selecione F10 ou escolha o botão Passo a passo na barra de ferramentas Depurar ou escolha Depurar>Passo a Passo na barra de menus. Selecione F10 mais duas vezes para passar da chamada do
SendMessagemétodo.F10 avança o depurador sem entrar em funções ou métodos, embora seu código ainda seja executado. Dessa forma, pulamos a depuração do código no
SendMessagemétodo, no qual não estamos interessados no momento.Para iterar pelo
forloop algumas vezes, selecione F10 repetidamente. Durante cada iteração do loop, pause no ponto de interrupção e passe o mouse sobre a variávelnamepara verificar seu valor na dica de dados.
O valor da variável muda com cada iteração do
forloop, mostrando valores def, em seguidafr, efreassim por diante. Para avançar o depurador pelo loop mais rapidamente, selecione F5, o que avança para o ponto de interrupção em vez da próxima linha de código.Enquanto a execução do código estiver em pausa no loop do método
Main, selecione F11, ou escolha o botão Avançar na barra de ferramentas Depurar, ou escolha Depurar>Avançar na barra de menus, até chegar à chamada do métodoSendMessage.O depurador deve estar pausado nessa linha de código:
SendMessage(name, a[i]);Para entrar no
SendMessagemétodo, selecione F11 novamente.O ponteiro amarelo avança para o
SendMessagemétodo.
F11 ajuda você a examinar o fluxo de execução do 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 ignora a entrada em métodos nonuser. Para saber mais sobre a depuração de código nonuser, consulte Just My Code.
Depois de concluir a depuração do método
SendMessage, você estará pronto para retornar ao loopfordo métodomain.Para sair do
SendMessagemétodo, selecione Shift+F11, ou escolha o botão Sair do Método na barra de ferramentas de Depuração, ou escolha Depurar>Sair do Método 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ê o ponteiro amarelo de volta no loop do método
for, pausado na chamada do métodoSendMessage. Para obter mais informações sobre diferentes maneiras de percorrer seu código, consulte Navegar código no depurador.
Navegar pelo código usando Executar para Clicar
Selecione F5 para avançar para o ponto de interrupção novamente.
No editor de código, role para baixo e passe o mouse sobre o
Console.WriteLinemétodo noSendMessagemétodo até que o botão verde Executar até Clicar
apareça. A dica do botão mostra "Executar até aqui".
Observação
O botão Executar para Clicar é novo no Visual Studio 2017. (Se você não vir o botão de seta verde, use F11 neste exemplo para avançar o depurador para o lugar certo.)
Selecione o botão Executar para Clicar .
O depurador avança para o
Console.WriteLinemétodo.Usar esse botão é semelhante à configuração de um ponto de interrupção temporário. Executar para Clicar é útil para se locomover rapidamente em uma região visível do código do aplicativo (você pode selecionar em qualquer arquivo aberto).
Selecione F5 para avançar para o ponto de interrupção novamente.
No editor de código, passe o mouse sobre a
Console.WriteLinechamada de método noSendMessagemétodo até que o botão Executar para Clicar seja exibido. A dica de ferramenta do botão mostra "Executar até aqui".
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 doConsole.WriteLinemétodo e escolha Executar para Cursor no menu de contexto.O depurador avança para a chamada do método
Console.WriteLine.Usar o botão Executar para Clicar é semelhante à configuração de um ponto de interrupção temporário e é útil para se locomover rapidamente em uma região visível do código do aplicativo em um arquivo aberto.
Reinicie seu aplicativo rapidamente
Selecione o botão Reiniciar
na barra de ferramentas de depuração (Ctrl + Shift + F5).
Ao pressionar Reiniciar, você economiza tempo em comparação com a opção de parar o aplicativo e reiniciar o depurador. O depurador pausa no primeiro ponto de interrupção alcançado durante a execução do código.
O depurador para novamente no ponto de interrupção que você definiu anteriormente dentro do for loop.
Para executar novamente seu aplicativo desde o início no depurador, selecione Ctrl+Shift+F5 ou escolha o botão Reiniciar na barra de ferramentas Depurar ou escolha Depurar Reinicialização> na barra de menus.
Reinicie o depurador e reinicie-o em uma etapa. Quando o depurador é reiniciado, ele vai até o primeiro ponto de interrupção, que é o ponto de interrupção definido anteriormente dentro do for loop, e então pausa.
Inspecionar variáveis com as janelas Autos e Locais
Examine a janela Autos na parte inferior do editor de código.
Se estiver fechado, abra-o enquanto estiver em pausa no depurador escolhendo Depurar>Windows>Autos.
Na janela Autos , você verá variáveis e seu valor atual. A janela Autos mostra todas as variáveis usadas na linha atual ou na linha anterior (verifique a documentação do comportamento específico do idioma).
Em seguida, examine a janela Locais , em uma guia ao lado da janela Autos .
Expanda a
lettersvariável para mostrar os elementos que ela contém.
A janela Locals mostra as variáveis que estão no escopo atual, ou seja, o contexto de execução atual.
As janelas Autos e Locais mostram valores de variáveis durante a depuração. As janelas só ficam disponíveis durante uma sessão de depuração. A janela Autos mostra variáveis usadas na linha atual em que o depurador está e na linha anterior. A janela Locais mostra variáveis definidas no escopo local, que geralmente é a função ou o método atual.
Enquanto o depurador está em pausa, exiba a janela Autos na parte inferior do editor de código.
Se a janela Autos estiver fechada, selecione Ctrl+D, A ou escolha Depurar>Windows>Autos na barra de menus.
Com o depurador ainda em pausa, exiba a janela Locais, em uma guia ao lado da janela Autos.
Se a janela Locais estiver fechada, selecione Ctrl+D, L ou escolha Depurar>Windows>Locais.
Na janela Locais , expanda a
lettersvariável para ver seus elementos de matriz e seus valores.
Para obter mais informações sobre as janelas Autos e Locais , consulte Inspecionar variáveis nas janelas Autos e Locais.
Definir uma inspeção
Na janela principal do editor de código, clique com o botão direito do mouse na variável name e escolha Adicionar Monitoramento.
A janela Watch é aberta na parte inferior do editor de código. Você pode usar uma janela Watch para especificar uma variável (ou uma expressão) na qual deseja ficar de olho.
Agora, você tem uma inspeção na variável name e pode ver sua alteração de valor conforme se move pelo debugger. Ao contrário das outras janelas de variáveis, a janela Watch sempre mostra as variáveis que você está assistindo (elas ficam esmaecidas quando fora do escopo).
Você pode especificar uma variável ou expressão que deseja monitorar ao depurar o código, adicionando-a à janela Watch.
Enquanto o depurador está pausado, clique com o botão direito do mouse na variável
namee escolha Adicionar Monitoramento.A janela Watch é aberta por padrão na parte inferior do editor de código.
Agora que você definiu um relógio na variável, percorra seu
namecódigo para ver o valor da alteração danamevariável com cadaforiteração de loop.Ao contrário das outras janelas variáveis, a janela Inspeção sempre mostra as variáveis que você está observando. Variáveis fora do escopo são exibidas como indisponíveis.
Para obter mais informações sobre a janela Observação, consulte Variáveis de observação com janelas de observação.
Examinar a pilha de chamadas
Enquanto a execução do código é pausada no loop
for, selecione a janela Pilha de Chamadas, que é aberta por padrão no painel inferior direito.Se estiver fechado, abra-o enquanto estiver em pausa no depurador escolhendo Depurar>Windows>Pilha de Chamadas.
Selecione F11 algumas vezes até ver o depurador pausar no
SendMessagemétodo. Olhe para a janela pilha de chamadas.
A janela Pilha de Chamadas mostra a ordem em que os métodos e as funções são chamados. A linha superior mostra a função atual (o
SendMessagemétodo neste aplicativo). A segunda linha mostra queSendMessagefoi chamado pelo métodoMaine assim por diante.Observação
A janela Pilha de Chamadas é semelhante à perspectiva de Depuração em alguns IDEs, como o Eclipse.
A pilha de chamadas é uma boa maneira de examinar e entender o fluxo de execução de um aplicativo.
Você pode clicar duas vezes em uma linha de código para examinar esse código-fonte, que também altera o escopo atual em inspeção pelo depurador. Essa ação não avança o depurador.
Você também pode usar os menus acessados ao clicar com o botão direito do mouse na janela 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 Cursor e examinar o código-fonte. Para obter mais informações, consulte Como examinar a pilha de chamadas.
A Pilha de Chamadas pode ajudá-lo a entender o fluxo de execução do seu aplicativo, mostrando a ordem em que métodos e funções estão sendo chamados.
Enquanto o depurador está pausado no
forloop, exiba a janela Pilha de Chamadas, que se abre por padrão no painel inferior direito do editor de código.Se a janela Pilha de Chamadas estiver fechada, selecione Ctrl+D, C ou escolha Depurar>Windows>Pilha de Chamadas na barra de menus.
Na janela Pilha de Chamadas , você verá o ponteiro amarelo no método atual
Main.No método
SendMessage, selecione F11 algumas vezes até ver o depurador pausar.A linha superior da janela Pilha de Chamadas mostra a função atual, que é o método
SendMessage. A segunda linha mostra que oSendMessagemétodo foi chamado doMainmétodo.
Observação
A janela Pilha de Chamadas é semelhante à perspectiva de depuração em alguns IDEs, como o Eclipse.
Na janela Pilha de Chamadas, você pode clicar duas vezes em uma linha de código para acessar esse código-fonte, o que altera o escopo atual sob inspeção pelo depurador. Essa ação não avança o depurador.
Você também pode usar os menus acessados ao clicar com o botão direito do mouse na janela 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 Cursor ou ir para o código-fonte.
Para obter mais informações sobre a Pilha de Chamadas, consulte Como examinar a pilha de chamadas.
Próximas etapas
Neste tutorial, você aprendeu a iniciar o depurador, percorrer o código e inspecionar variáveis. Talvez você queira obter uma visão de alto nível dos recursos do depurador, juntamente com links para mais informações.