Introdução ao Depurador do Visual StudioFirst look at the Visual Studio Debugger

Este tópico apresenta as ferramentas de depurador fornecidas pelo Visual Studio.This topic introduces the debugger tools provided by Visual Studio. No contexto do Visual Studio, quando você depura seu aplicativo, significa que você está executando o aplicativo com o depurador anexado (ou seja, no modo de depurador).In the Visual Studio context, when you debug your app, it usually means that you are running the application with the debugger attached (that is, in debugger mode). Quando você faz isso, o depurador fornece várias maneiras de mostrar o que o código está fazendo enquanto é executado.When you do this, the debugger provides many ways to see what your code is doing while it runs. Você pode percorrer seu código e examinar os valores armazenados em variáveis, pode definir inspeções em variáveis para ver quando os valores são alterados, você pode examinar o caminho de execução do seu código, et al. Se esta for a primeira vez que você tentou depurar o código, talvez queira ler a depuração de iniciantes absolutos antes de passar por este tópico.You can step through your code and look at the values stored in variables, you can set watches on variables to see when values change, you can examine the execution path of your code, et al. If this is the first time that you've tried to debug code, you may want to read Debugging for absolute beginners before going through this topic.

Os recursos descritos aqui são aplicáveis a C#, C++, Visual Basic, JavaScript e a outras linguagens compatíveis com o Visual Studio (exceto quando indicado).The features described here are applicable to C#, C++, Visual Basic, JavaScript, and other languages supported by Visual Studio (except where noted).

Definir um ponto de interrupção e iniciar o depuradorSet a breakpoint and start the debugger

Para depurar, você precisa iniciar o aplicativo com o depurador anexado ao processo do aplicativo.To debug, you need to start your app with the debugger attached to the app process. F5 (Depurar > Iniciar Depuração) é a maneira mais comum de fazer isso.F5 (Debug > Start Debugging) is the most common way to do that. No entanto, talvez você ainda não definiu pontos de interrupção para examinar o código do seu aplicativo, portanto faremos isso primeiro e, em seguida, iniciaremos a depuração.However, right now you may not have set any breakpoints to examine your app code, so we will do that first and then start debugging. Pontos de interrupção são o recurso mais básico e essencial da depuração confiável.Breakpoints are the most basic and essential feature of reliable debugging. Um ponto de interrupção indica quando o Visual Studio deve suspender o código em execução para que você possa examinar os valores das variáveis ou o comportamento de memória ou se uma ramificação de código está sendo executada ou não.A breakpoint indicates where Visual Studio should suspend your running code so you can take a look at the values of variables, or the behavior of memory, or whether or not a branch of code is getting run.

Se você tem um arquivo aberto no editor de código, é possível definir um ponto de interrupção clicando na margem à esquerda de uma linha de código.If you have a file open in the code editor, you can set a breakpoint by clicking in the margin to the left of a line of code.

Definir um ponto de interrupçãoSet a Breakpoint

Pressione F5 (Depurar > Iniciar Depuração) ou o botão Iniciar Depuração Iniciar Depuração na barra de ferramentas depurar e o depurador será executado para o primeiro ponto de interrupção que encontrar.Press F5 (Debug > Start Debugging) or the Start Debugging button Start Debugging in the Debug Toolbar, and the debugger runs to the first breakpoint that it encounters. Se o aplicativo ainda não estiver em execução, F5 iniciará o depurador e o interromperá no primeiro ponto de interrupção.If the app is not yet running, F5 starts the debugger and stops at the first breakpoint.

Os pontos de interrupção são um recurso útil quando você sabe qual linha ou seção de código deseja examinar em detalhes.Breakpoints are a useful feature when you know the line of code or the section of code that you want to examine in detail.

Nós fornecemos os atalhos de teclado para a maioria dos comandos porque eles tornam a navegação pelo código do aplicativo mais rápida.We provide the keyboard shortcuts for most commands because they make navigation of your app code quicker. (Os comandos equivalentes, como comandos de menu, são mostrados entre parênteses).(Equivalent commands such as menu commands are shown in parentheses.)

Para iniciar seu aplicativo com o depurador anexado, pressione F11 (Depurar > Intervir).To start your app with the debugger attached, press F11 (Debug > Step Into). F11 é o comando Intervir, que avança a execução do aplicativo uma instrução por vez.F11 is the Step Into command and advances the app execution one statement at a time. Quando você inicia o aplicativo com F11, o depurador é interrompido na primeira instrução que é executada.When you start the app with F11, the debugger breaks on the first statement that gets executed.

Depuração de F11 emF11 Step Into

A seta amarela representa a instrução na qual o depurador ficou em pausa, que também suspende a execução do aplicativo no mesmo ponto (essa instrução ainda não foi executada).The yellow arrow represents the statement on which the debugger paused, which also suspends app execution at the same point (this statement has not yet executed).

F11 é uma boa maneira de examinar o fluxo de execução com o máximo de detalhes.F11 is a good way to examine the execution flow in the most detail. (Para mover-se mais rapidamente pelo código, mostraremos algumas outras opções também.) Por padrão, o depurador ignora o código que não é do usuário (se você quiser obter mais detalhes, consulte apenas meu código).(To move faster through code, we show you some other options as well.) By default, the debugger skips over non-user code (if you want more details, see Just My Code).

Note

No código gerenciado, você verá uma caixa de diálogo perguntando se deseja ser notificado quando passar automaticamente por propriedades e operadores (comportamento padrão).In managed code, you will see a dialog box asking if you want to be notified when you automatically step over properties and operators (default behavior). Se você quiser alterar a configuração depois, desabilite a configuração Passar por propriedades e operadores no menu Ferramentas > Opções em Depuração.If you want to change the setting later, disable Step over properties and operators setting in the Tools > Options menu under Debugging.

Passar pelo código para ignorar funçõesStep over code to skip functions

Quando você estiver em uma linha de código que é uma chamada de função ou de método, poderá pressionar F10 (Depurar > Passar) em vez de F11.When you are on a line of code that is a function or method call, you can press F10 (Debug > Step Over) instead of F11.

Pressionar F10 avança o depurador sem intervir em funções ou métodos no código do aplicativo (o código ainda é executado).F10 advances the debugger without stepping into functions or methods in your app code (the code still executes). Ao pressionar F10, será possível ignorar o código no qual você não está interessado.By pressing F10, you can skip over code that you're not interested in. Dessa forma, você poderá chegar rapidamente no código que está mais interessado.This way, you can quickly get to code that you are more interested in.

Intervir em uma propriedadeStep into a property

Como mencionado anteriormente, por padrão, o depurador ignora propriedades gerenciadas e campos, mas o comando Intervir Específico permite substituir esse comportamento.As mentioned earlier, by default the debugger skips over managed properties and fields, but the Step Into Specific command allows you to override this behavior.

Clique com o botão direito do mouse em uma propriedade ou um campo e escolha Intervir Específico e, em seguida, escolha uma das opções disponíveis.Right-click on a property or field and choose Step Into Specific, then choose one of the available options.

Entrar em específicoStep into Specific

Neste exemplo, Intervir Específico nos leva ao código de Path.set.In this example, Step Into Specific gets us to the code for Path.set.

Entrar em específicoStep into Specific

Executar rapidamente até um ponto no código usando o mouseRun to a point in your code quickly using the mouse

No depurador, passe o mouse sobre uma linha de código até que o botão Executar para clicar (executar a execução aqui) Execute para clicar à esquerda.While in the debugger, hover over a line of code until the Run to Click (Run execution to here) button Run to Click appears on the left.

Executar para clicar emRun to Click

Note

O botão Executar com um Clique (Realizar a execução até aqui) está disponível no Visual Studio 2017Visual Studio 2017 em diante.The Run to Click (Run execution to here) button is available starting in Visual Studio 2017Visual Studio 2017.

Clique no botão Executar com um Clique (Realizar a execução até aqui).Click the Run to Click (Run execution to here) button. O depurador avança até a linha de código em que você clicou.The debugger advances to the line of code where you clicked.

O uso desse botão é semelhante à configuração de um ponto de interrupção temporário.Using this button is similar to setting a temporary breakpoint. Esse comando também é útil para percorrer rapidamente uma região visível do código do aplicativo.This command is also handy for getting around quickly within a visible region of app code. Você pode usar Executar com um Clique em qualquer arquivo aberto.You can use Run to Click in any open file.

Avançar o depurador para fora da função atualAdvance the debugger out of the current function

Às vezes, talvez você queira continuar a sessão de depuração, avançando o depurador até o fim da função atual.Sometimes, you might want to continue your debugging session but advance the debugger all the way through the current function.

Pressione Shift + F11 (ou Depurar > Sair).Press Shift + F11 (or Debug > Step Out).

Este comando retoma a execução do aplicativo (e avança o depurador) até que a função atual retorne.This command resumes app execution (and advances the debugger) until the current function returns.

Executar até o cursorRun to cursor

Pare o depurador pressionando o botão parar depuração vermelho parar depuração ou Shift + F5.Stop the debugger by pressing the Stop Debugging red button Stop Debugging or Shift + F5.

Clique com o botão direito do mouse em uma linha de código do seu aplicativo e escolha Executar até o Cursor.Right-click a line of code in your app and choose Run to Cursor. Esse comando inicia a depuração e define um ponto de interrupção temporário na linha de código atual.This command starts debugging and sets a temporary breakpoint on the current line of code.

Executar até o cursorRun to Cursor

Se você tiver definido pontos de interrupção, o depurador parará no primeiro ponto de interrupção que encontrar.If you have set breakpoints, the debugger pauses on the first breakpoint that it hits.

Pressione F5 até alcançar a linha de código em que você selecionou Executar até o Cursor.Press F5 until you reach the line of code where you selected Run to Cursor.

Esse comando é útil quando você está editando o código e deseja definir rapidamente um ponto de interrupção temporário e iniciar o depurador ao mesmo tempo.This command is useful when you are editing code and want to quickly set a temporary breakpoint and start the debugger at the same time.

Note

Você pode usar Executar até o Cursor na janela Pilha de Chamadas enquanto está depurando.You can use Run to Cursor in the Call Stack window while you are debugging.

Reinicie o aplicativo rapidamenteRestart your app quickly

Clique no botão reiniciar aplicativo de reinicialização na barra de ferramentas depurar (Ctrl + Shift + F5).Click the Restart Restart App button in the Debug Toolbar (Ctrl + Shift +F5).

Ao pressionar Reiniciar, você economiza tempo em comparação com a opção de parar o aplicativo e reiniciar o depurador.When you press Restart, it saves time versus stopping the app and restarting the debugger. O depurador é pausado no primeiro ponto de interrupção que é encontrado pela execução do código.The debugger pauses at the first breakpoint that is hit by executing code.

Se você quiser interromper o depurador e voltar para o editor de código, poderá pressionar o botão vermelho parar parar depuração em vez de reiniciar.If you do want to stop the debugger and get back into the code editor, you can press the red stop Stop Debugging button instead of Restart.

Editar seu código e continuar a depuraçãoC#(, VB C++,, XAML)Edit your code and continue debugging (C#, VB, C++, XAML)

Na maioria dos idiomas com suporte no Visual Studio, você pode editar seu código no meio de uma sessão de depuração e continuar a depuração.In most languages supported by Visual Studio, you can edit your code in the middle of a debugging session and continue debugging. Para usar esse recurso, clique em seu código com o cursor enquanto estiver em pausa no depurador, faça edições e pressione F5, F10ou F11 para continuar a depuração.To use this feature, click into your code with your cursor while paused in the debugger, make edits, and press F5, F10, or F11 to continue debugging.

Editar e continuar a depuraçãoEdit and continue debugging

Para obter mais informações sobre como usar o recurso e as limitações de recursos, consulte Editar e continuar.For more information on using the feature and on feature limitations, see Edit and Continue.

Para modificar o código XAML durante uma sessão de depuração, consulte gravar e depurar o código XAML em execução com o Hot recarregamento de XAML.To modify XAML code during a debugging session, see Write and debug running XAML code with XAML Hot Reload.

Inspecionar variáveis com dicas de dadosInspect variables with data tips

Agora que você sabe um pouco mais sobre a navegação, é uma boa oportunidade começar a inspecionar o estado do aplicativo (variáveis) com o depurador.Now that you know your way around a little, you have a good opportunity to start inspecting your app state (variables) with the debugger. Os recursos que permitem que você inspecione variáveis são alguns dos mais úteis do depurador e há diferentes maneiras de fazer isso.Features that allow you to inspect variables are some of the most useful features of the debugger, and there are different ways to do it. Muitas vezes, ao tentar depurar um problema, você tenta descobrir se as variáveis estão armazenando os valores que elas deveriam conter em um estado específico do aplicativo.Often, when you try to debug an issue, you are attempting to find out whether variables are storing the values that you expect them to have in a particular app state.

Com o depurador em pausa, passe o mouse sobre um objeto com o mouse e você verá o valor da propriedade padrão (neste exemplo, o nome do arquivo market 031.jpg é o valor da propriedade padrão).While paused in the debugger, hover over an object with the mouse and you see its default property value (in this example, the file name market 031.jpg is the default property value).

Exibir uma dica de dadosView a Data Tip

Expanda o objeto para ver todas as suas propriedades (como a propriedade FullPath neste exemplo).Expand the object to see all its properties (such as the FullPath property in this example).

Muitas vezes, durante a depuração, queremos uma maneira rápida de verificar valores de propriedade em objetos e as dicas de dados são uma ótima maneira de fazer isso.Often, when debugging, you want a quick way to check property values on objects, and the data tips are a good way to do it.

Tip

Na maioria das linguagens compatíveis, você pode editar o código durante uma sessão de depuração.In most supported languages, you can edit code in the middle of a debugging session. Para obter mais informações, confira Editar e Continuar.For more info, see Edit and Continue.

Inspecionar variáveis com as janelas Autos e LocaisInspect variables with the Autos and Locals windows

Durante a depuração, examine a janela Autos na parte inferior do editor de códigos.While debugging, look at the Autos window at the bottom of the code editor.

Janela de automóveisAutos Window

Na janela Autos, veja as variáveis, bem como seus valores atuais e os respectivos tipos.In the Autos window, you see variables along with their current value and their type. A janela Autos mostra todas as variáveis usadas na linha atual ou na linha anterior (No C++, a janela mostra as variáveis nas três linhas de código anteriores.The Autos window shows all variables used on the current line or the preceding line (In C++, the window shows variables in the preceding three lines of code. Verifique a documentação para saber o comportamento específico a uma linguagem).Check documentation for language-specific behavior).

Note

Em JavaScript, há compatibilidade com a janela Locais, mas não com a janela Autos.In JavaScript, the Locals window is supported but not the Autos window.

Em seguida, examine a janela Locais.Next, look at the Locals window. A janela Locais mostra as variáveis que estão no escopo no momento.The Locals window shows you the variables that are currently in scope.

Janela locaisLocals Window

Neste exemplo, o objeto this e o objeto f estão no escopo.In this example, the this object and the object f are in scope. Para obter mais informações, confira Inspecionar variáveis nas janelas Locais e Autos.For more info, see Inspect Variables in the Autos and Locals Windows.

Definir uma inspeçãoSet a watch

Você pode usar uma janela Inspeção para especificar uma variável (ou uma expressão) que deseja acompanhar.You can use a Watch window to specify a variable (or an expression) that you want to keep an eye on.

Durante a depuração, clique com o botão direito do mouse em um objeto e escolha Adicionar Inspeção.While debugging, right-click an object and choose Add Watch.

Janela de inspeçãoWatch Window

Neste exemplo, há uma inspeção definida no objeto f e você pode ver seu valor sendo alterado, conforme percorre o depurador.In this example, you have a watch set on the f object, and you can see its value change as you move through the debugger. Ao contrário das outras janelas de variáveis, a janela Inspeção sempre mostra as variáveis que você está inspecionando (eles ficam esmaecidas quando estão fora do escopo).Unlike the other variable windows, the Watch windows always show the variables that you are watching (they're grayed out when out of scope).

Para obter mais informações, confira Definir uma Inspeção usando as janelas Inspeção e QuickWatchFor more info, see Set a Watch using the Watch and QuickWatch Windows

Examinar a pilha de chamadasExamine the call stack

Clique na janela Pilha de Chamadas durante a depuração, a qual fica aberta por padrão no painel inferior direito.Click the Call Stack window while you are debugging, which is by default open in the lower right pane.

Examinar a pilha de chamadasExamine the Call Stack

A janela Pilha de Chamadas mostra a ordem em que os métodos e as funções são chamados.The Call Stack window shows the order in which methods and functions are getting called. A linha superior mostra a função atual (o método Update neste exemplo).The top line shows the current function (the Update method in this example). A segunda linha mostra que Update foi chamado por meio da propriedade Path.set e assim por diante.The second line shows that Update was called from the Path.set property, and so on. A pilha de chamadas é uma boa maneira de examinar e entender o fluxo de execução de um aplicativo.The call stack is a good way to examine and understand the execution flow of an app.

Note

A janela Pilha de Chamadas é semelhante à perspectiva de Depuração em alguns IDEs, como o Eclipse.The Call Stack window is similar to the Debug perspective in some IDEs like Eclipse.

Você pode clicar duas vezes em uma linha de código para examinar esse código-fonte. Isso também altera o escopo atual que está sendo inspecionado pelo depurador.You can double-click a line of code to go look at that source code and that also changes the current scope being inspected by the debugger. Isso não avança o depurador.This does not advance the debugger.

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.You can also use right-click menus from the Call Stack window to do other things. Por exemplo, você pode inserir pontos de interrupção em funções especificas, reiniciar o aplicativo usando Executar até o Cursor e examinar o código-fonte.For example, you can insert breakpoints into specific functions, restart your app using Run to Cursor, and to go examine source code. Confira Como examinar a Pilha de Chamadas.See How to: Examine the Call Stack.

Examinar uma exceçãoExamine an exception

Quando seu aplicativo gera uma exceção, o depurador leva você até a linha de código que lançou a exceção.When your app throws an exception, the debugger takes you to the line of code that threw the exception.

Auxiliar de exceçãoException Helper

Neste exemplo, o Auxiliar de Exceção mostra uma exceção System.Argument e uma mensagem de erro que diz que o caminho não é um formato válido.In this example, the Exception Helper shows you a System.Argument exception and an error message that says that the path is not a legal form. Portanto, sabemos que o erro ocorreu em um método ou um argumento de função.So, we know the error occurred on a method or function argument.

Neste exemplo, a chamada DirectoryInfo gerou o erro na cadeia de caracteres vazia armazenada na variável value.In this example, the DirectoryInfo call gave the error on the empty string stored in the value variable.

O Auxiliar de Exceção é um ótimo recurso que pode ajudá-lo a depurar erros.The Exception Helper is a great feature that can help you debug errors. Você também pode fazer coisas como exibir detalhes do erro e adicionar uma inspeção por meio do Auxiliar de Exceção.You can also do things like view error details and add a watch from the Exception Helper. Ou, se necessário, você pode alterar as condições para lançar a exceção específica.Or, if needed, you can change conditions for throwing the particular exception. Para obter mais informações de como tratar exceções no código, confira Técnicas e ferramentas de depuração.For more information on how to handle exceptions in your code, see Debugging techniques and tools.

Note

O Auxiliar de Exceção substituiu o Assistente de Exceção do Visual Studio 2017Visual Studio 2017.The Exception Helper replaced the Exception Assistant starting in Visual Studio 2017Visual Studio 2017.

Expanda o nó Configurações de Exceção para ver mais opções de como lidar com esse tipo de exceção, mas você não precisa alterar nada neste tour!Expand the Exception Settings node to see more options on how to handle this exception type, but you don't need to change anything for this tour!

Configurar a depuraçãoConfigure debugging

Você pode configurar seu projeto para compilar como uma configuração de depuração ou versão, configurar as propriedades do projeto para depuração ou definir as configurações gerais para depuração.You can configure your project to build as a Debug or Release configuration, configure project properties for debugging, or configure general settings for debugging. Além disso, você pode configurar o depurador para exibir informações personalizadas usando recursos como o atributo DebuggerDisplay ou, para C/C++, a estrutura NatVis.In addition, you can configure the debugger to display custom information using features such as DebuggerDisplay attribute or, for C/C++, the NatVis framework.

As propriedades de depuração são específicas para cada tipo de projeto.Debugging properties are specific to each project type. Por exemplo, você pode especificar um argumento para passar ao aplicativo ao iniciá-lo.For example, you can specify an argument to pass to the application when you start it. Você pode acessar as propriedades específicas do projeto clicando com o botão direito do mouse no projeto em Gerenciador de Soluções e selecionando Propriedades.You can access the project-specific properties by right-clicking the project in Solution Explorer and selecting Properties. As propriedades de depuração normalmente aparecem na guia Compilar ou depurar , dependendo do tipo de projeto específico.Debugging properties typically appear in the Build or Debug tab, depending on the particular project type.

Propriedades do projetoProject properties

Depurar aplicativos ASP.NET dinâmicos no Serviço de Aplicativo do AzureDebug live ASP.NET apps in Azure App Service

O Depurador de Instantâneos tira um instantâneo de seus aplicativos em produção quando o código no qual você está interessado é executado.the Snapshot Debugger takes a snapshot of your in-production apps when code that you are interested in executes. Para instruir o depurador a tirar um instantâneo, defina snappoints e logpoints em seu código.To instruct the debugger to take a snapshot, you set snappoints and logpoints in your code. O depurador permite ver exatamente o que deu errado sem afetar o tráfego do seu aplicativo de produção.The debugger lets you see exactly what went wrong, without impacting traffic of your production application. O Depurador de Instantâneo pode ajudar a reduzir drasticamente o tempo que leva para resolver problemas que ocorrem em ambientes de produção.The Snapshot Debugger can help you dramatically reduce the time it takes to resolve issues that occur in production environments.

Iniciar o depurador de instantâneosLaunch the snapshot debugger

A coleção de instantâneos está disponível para aplicativos do ASP.NET em execução no Serviço de Aplicativo do Azure.Snapshot collection is available for ASP.NET applications running in Azure App Service. Aplicativos ASP.NET devem estar em execução no .NET Framework 4.6.1 ou posterior e os aplicativos ASP.NET Core devem ser executados no .NET Core 2.0 ou posterior no Windows.ASP.NET applications must be running on .NET Framework 4.6.1 or later, and ASP.NET Core applications must be running on .NET Core 2.0 or later on Windows.

Para obter mais informações, confira Depurar aplicativos ASP.NET dinâmicos usando o Depurador de Instantâneos.For more information, see Debug live ASP.NET apps using the Snapshot Debugger.

Exibir instantâneos com o retrocesso do IntelliTrace (Visual Studio Enterprise)View snapshots with IntelliTrace step-back (Visual Studio Enterprise)

O retrocesso do IntelliTrace tira automaticamente um instantâneo do seu aplicativo em cada evento de etapa do depurador e do ponto de interrupção.IntelliTrace step-back automatically takes a snapshot of your application at every breakpoint and debugger step event. Os instantâneos registrados permitem retornar aos pontos de interrupção ou às etapas anteriores e exibir o estado do aplicativo como ele era no passado.The recorded snapshots enable you to go back to previous breakpoints or steps and view the state of the application as it was in the past. O retrocesso do IntelliTrace poderá poupar seu tempo quando você desejar ver o estado do aplicativo anterior, mas não desejar reiniciar a depuração nem recriar o estado do aplicativo desejado.IntelliTrace step-back can save you time when you want to see the previous application state but don't want to restart debugging or recreate the desired app state.

É possível navegar e exibir instantâneos usando os botões Voltar e Avançar na barra de ferramentas Depurar.You can navigate and view snapshots by using the Step Backward and Step Forward buttons in the Debug toolbar. Esses botões navegam pelos eventos exibidos na guia Eventos na janela Ferramentas de Diagnóstico.These buttons navigate the events that appear in the Events tab in the Diagnostic Tools window.

Botões voltar e avançar da etapaStep Backward and Forward Buttons

Para obter mais informações, confira a página Inspecionar estados anteriores do aplicativo usando o IntelliTrace.For more information, see the Inspect previous app states using IntelliTrace page.

Próximas etapasNext steps

Neste tutorial, você obteve uma visão rápida de muitos recursos do depurador.In this tutorial, you've had a quick look at many debugger features. Talvez você deseje fazer uma análise mais detalhada de uma dessas funcionalidades, como pontos de interrupção.You may want a more in-depth look at one of these features, such as breakpoints.