Primer vistazo al depurador de Visual StudioFirst look at the Visual Studio Debugger

En este tema se presentan las herramientas de depuración que proporciona Visual Studio.This topic introduces the debugger tools provided by Visual Studio. En el contexto de Visual Studio, depurar la aplicación normalmente significa ejecutar la aplicación con el depurador asociado (es decir, en modo 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). Al hacerlo, el depurador ofrece muchas formas de ver lo que hace el código durante la ejecución.When you do this, the debugger provides many ways to see what your code is doing while it runs. Esto permite revisar el código y fijarse en los valores almacenados en las variables, establecer inspecciones en ellas para ver cuándo cambian esos valores, examinar la ruta de ejecución del código, etc. Si esta es la primera vez que intenta depurar código, es posible que quiera leer Depuración para principiantes sin experiencia antes de continuar con este tema.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.

Las características que se explican aquí son aplicables a C#, C++, Visual Basic, JavaScript y otros lenguajes compatibles con Visual Studio (a menos que se indique lo contrario).The features described here are applicable to C#, C++, Visual Basic, JavaScript, and other languages supported by Visual Studio (except where noted).

Establecer un punto de interrupción e iniciar el depuradorSet a breakpoint and start the debugger

Para depurar, tiene que iniciar la aplicación con el depurador asociado al proceso de la aplicación.To debug, you need to start your app with the debugger attached to the app process. F5 (Depurar > Iniciar depuración) es la forma más habitual de hacerlo.F5 (Debug > Start Debugging) is the most common way to do that. Pero de momento es posible que no haya establecido ningún punto de interrupción para examinar el código de la aplicación, por lo que eso es lo que se va a hacer primero y luego se va a iniciar la depuración.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. Los puntos de interrupción son la característica más básica y esencial para una depuración confiable.Breakpoints are the most basic and essential feature of reliable debugging. Un punto de interrupción indica dónde Visual Studio debe suspender la ejecución de código para poder echar un vistazo a los valores de las variables o al comportamiento de la memoria, o determinar si se está ejecutando o no una bifurcación de código.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.

Si tiene un archivo abierto en el editor de código, puede establecer un punto de interrupción si hace clic en el margen situado a la izquierda de una línea 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.

Establecimiento de un punto de interrupciónSet a Breakpoint

Presione F5 (Depurar > Iniciar depuración) o el botón Iniciar depuración Iniciar depuración en la barra de herramientas de depuración para que el depurador se ejecute hasta el primer punto de interrupción que encuentre.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. Si la aplicación todavía no se está ejecutando, F5 inicia el depurador y lo detiene en el primer punto de interrupción.If the app is not yet running, F5 starts the debugger and stops at the first breakpoint.

Los puntos de interrupción son una característica de utilidad cuando se conoce la línea o la sección de código que se quiere examinar en detalle.Breakpoints are a useful feature when you know the line of code or the section of code that you want to examine in detail.

Se proporcionan métodos abreviados de teclado para la mayoría de los comandos porque hacen que la exploración del código de las aplicaciones sea más rápida.We provide the keyboard shortcuts for most commands because they make navigation of your app code quicker. (Los comandos equivalentes, como los comandos de menú, se muestran entre paréntesis).(Equivalent commands such as menu commands are shown in parentheses.)

Para iniciar la aplicación con el depurador asociado, presione F11 (Depurar > Depurar paso a paso por instrucciones).To start your app with the debugger attached, press F11 (Debug > Step Into). F11 es el comando Depurar paso a paso por instrucciones y permite avanzar la ejecución de la aplicación de instrucción en instrucción.F11 is the Step Into command and advances the app execution one statement at a time. Cuando se inicia la aplicación con F11, el depurador se interrumpe en la primera instrucción que se ejecuta.When you start the app with F11, the debugger breaks on the first statement that gets executed.

F11 Depurar paso a paso por instruccionesF11 Step Into

La flecha amarilla representa la instrucción en la que el depurador se ha detenido, lo cual también suspende la ejecución de la aplicación en el mismo punto (esta instrucción todavía no se ha ejecutado).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 es una buena forma de examinar el flujo de ejecución con más detalle.F11 is a good way to examine the execution flow in the most detail. (Además se muestran otras opciones para moverse más rápido por el código). De forma predeterminada, el depurador omite el código que no es de usuario (si quiere más detalles, vea Solo mi 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

En código administrado, aparece un cuadro de diálogo que le pregunta si quiere recibir una notificación cuando salte automáticamente propiedades y operadores (comportamiento predeterminado).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). Si quiere cambiar el valor más adelante, deshabilite Step over properties and operators (Saltar propiedades y operadores) en el menú Herramientas > Opciones, en Depuración.If you want to change the setting later, disable Step over properties and operators setting in the Tools > Options menu under Debugging.

Saltar código para omitir funcionesStep over code to skip functions

Cuando se encuentre en una línea de código que sea una llamada de función o método, puede presionar F10 (Depurar > Saltar) en lugar 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.

F10 hace avanzar el depurador sin depurar las funciones ni los métodos del código de la aplicación paso a paso por instrucciones (el código se sigue ejecutando).F10 advances the debugger without stepping into functions or methods in your app code (the code still executes). Al presionar F10, puede saltar el código que no le interese.By pressing F10, you can skip over code that you're not interested in. De este modo, puede llegar rápidamente al código que más le interesa.This way, you can quickly get to code that you are more interested in.

Depurar paso a paso por instrucciones una propiedadStep into a property

Como se ha mencionado anteriormente, el depurador omite de forma predeterminada las propiedades y los campos administrados, pero el comando Ir a específico permite invalidar este comportamiento.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.

Haga clic con el botón derecho en un campo o propiedad y elija Ir a específico. Luego elija una de las opciones disponibles.Right-click on a property or field and choose Step Into Specific, then choose one of the available options.

Ir a específicoStep into Specific

En este ejemplo, Ir a específico lleva al código de Path.set.In this example, Step Into Specific gets us to the code for Path.set.

Ir a específicoStep into Specific

Ejecutar hasta un punto del código rápidamente con el mouseRun to a point in your code quickly using the mouse

En el depurador, mantenga el puntero sobre una línea de código hasta que el botón Run to Click (Ejecutar hasta clic) (ejecutar hasta aquí) Ejecutar hasta clic aparezca a la izquierda.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.

Ejecutar hasta clicRun to Click

Note

El botón Ejecutar hasta clic (Ejecutar hasta aquí) está disponible a partir de Visual Studio 2017Visual Studio 2017.The Run to Click (Run execution to here) button is available starting in Visual Studio 2017Visual Studio 2017.

Haga clic en el botón Ejecutar hasta clic (ejecutar hasta aquí).Click the Run to Click (Run execution to here) button. El depurador avanza hasta la línea de código donde se ha hecho clic.The debugger advances to the line of code where you clicked.

Usar este botón es similar a establecer un punto de interrupción temporal.Using this button is similar to setting a temporary breakpoint. Este comando también es útil para desplazarse rápidamente dentro de una región visible del código de la aplicación.This command is also handy for getting around quickly within a visible region of app code. Puede usar Ejecutar hasta clic en cualquier archivo abierto.You can use Run to Click in any open file.

Avanzar el depurador fuera de la función actualAdvance the debugger out of the current function

A veces, es posible que quiera continuar la sesión de depuración pero avanzar el depurador hasta el final de la función actual.Sometimes, you might want to continue your debugging session but advance the debugger all the way through the current function.

Presione Mayús + F11 (o Depurar > Paso a paso para salir).Press Shift + F11 (or Debug > Step Out).

Este comando reanuda la ejecución de la aplicación (y hace avanzar el depurador) hasta que se devuelve la función actual.This command resumes app execution (and advances the debugger) until the current function returns.

Ejecutar hasta el cursorRun to cursor

Para detener el depurador, presione el botón rojo Detener depuración Detener depuración o Mayús + F5.Stop the debugger by pressing the Stop Debugging red button Stop Debugging or Shift + F5.

Haga clic con el botón derecho en una línea de código de la aplicación y elija Ejecutar hasta el cursor.Right-click a line of code in your app and choose Run to Cursor. Este comando inicia la depuración y establece un punto de interrupción temporal en la línea de código actual.This command starts debugging and sets a temporary breakpoint on the current line of code.

Ejecutar hasta el cursorRun to Cursor

Si ha establecido puntos de interrupción, el depurador se detiene en el primero que alcanza.If you have set breakpoints, the debugger pauses on the first breakpoint that it hits.

Presione F5 hasta llegar a la línea de código donde ha seleccionado Ejecutar hasta el cursor.Press F5 until you reach the line of code where you selected Run to Cursor.

Este comando resulta útil cuando se edita código y se quiere establecer rápidamente un punto de interrupción temporal e iniciar el depurador al mismo tiempo.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

Puede usar Ejecutar hasta el cursor en la ventana Pila de llamadas mientras está depurando.You can use Run to Cursor in the Call Stack window while you are debugging.

Reiniciar la aplicación rápidamenteRestart your app quickly

Haga clic en el botón Reiniciar Reiniciar aplicación de la barra de herramientas de depuración (Ctrl + Mayús +F5).Click the Restart Restart App button in the Debug Toolbar (Ctrl + Shift +F5).

El botón Reiniciar permite ahorrar tiempo, ya que hace que no sea necesario detener la aplicación y reiniciar el depurador.When you press Restart, it saves time versus stopping the app and restarting the debugger. El depurador se detiene en el primer punto de interrupción que se alcanza al ejecutar el código.The debugger pauses at the first breakpoint that is hit by executing code.

Si quiere detener el depurador y volver al editor de código, puede presionar el botón rojo Detener depuración en lugar 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.

Inspeccionar variables con información sobre datosInspect variables with data tips

Ahora que sabe manejarse un poco, tiene una buena oportunidad de empezar a inspeccionar el estado de la aplicación (variables) con el 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. Las características que permiten inspeccionar variables son algunas de las más útiles del depurador, y hay diferentes formas de hacerlo.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. Con frecuencia, cuando intenta depurar un problema, está intentando averiguar si las variables están almacenando los valores que espera que tengan en un estado determinado de la aplicación.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.

Con el depurador detenido, mantenga el puntero sobre un objeto y vea su valor de propiedad predeterminado (en este ejemplo, el nombre de archivo market 031.jpg es el valor de propiedad predeterminado).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).

Visualización de información sobre datosView a Data Tip

Expanda el objeto para ver todas sus propiedades (como la propiedad FullPath en este ejemplo).Expand the object to see all its properties (such as the FullPath property in this example).

A menudo, al depurar, necesita poder comprobar rápidamente los valores de propiedad de los objetos, y la información sobre datos es una buena forma de hacerlo.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

En la mayoría de los lenguajes compatibles, es posible editar código en mitad de una sesión de depuración.In most supported languages, you can edit code in the middle of a debugging session. Para obtener más información, vea Editar código y seguir depurando.For more info, see Edit and Continue.

Inspeccionar variables con las ventanas Automático y Variables localesInspect variables with the Autos and Locals windows

Mientras depura, mire la ventana Automático de la parte inferior del editor de código.While debugging, look at the Autos window at the bottom of the code editor.

Ventana AutomáticoAutos Window

En la ventana Automático se ven las variables y su tipo y su valor actual.In the Autos window, you see variables along with their current value and their type. En la ventana Automático se muestran todas las variables que se usan en la línea actual o la anterior (en C++, la ventana muestra las variables de las tres líneas 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. Vea la documentación para obtener información sobre el comportamiento específico del lenguaje).Check documentation for language-specific behavior).

Note

En JavaScript, se admite la ventana Variables locales, pero no la ventana Automático.In JavaScript, the Locals window is supported but not the Autos window.

A continuación, mire la ventana Variables locales.Next, look at the Locals window. En la ventana Variables locales se muestran las variables del ámbito actual.The Locals window shows you the variables that are currently in scope.

Ventana variables localesLocals Window

En este ejemplo, el objeto this y el objeto f están en el ámbito.In this example, the this object and the object f are in scope. Para obtener más información, vea Inspeccionar las variables en las ventanas automático y variables locales.For more info, see Inspect Variables in the Autos and Locals Windows.

Establecer una inspecciónSet a watch

Puede usar una ventana Inspección para especificar una variable (o una expresión) que quiera supervisar.You can use a Watch window to specify a variable (or an expression) that you want to keep an eye on.

Mientras depura, haga clic con el botón derecho en un objeto y elija Agregar inspección.While debugging, right-click an object and choose Add Watch.

Ventana InspecciónWatch Window

En este ejemplo, hay una inspección establecida en el objeto f y puede ver cómo cambia su valor conforme avanza el 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. A diferencia de las otras ventanas de variables, en la ventana Inspección siempre se muestran las variables que se están viendo (y se atenúan cuando están fuera del ámbito).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 obtener más información, vea Variables de inspección con ventanas Inspección e Inspección rápidaFor more info, see Set a Watch using the Watch and QuickWatch Windows

Examinar la pila de llamadasExamine the call stack

Mientras depura, haga clic en la ventana Pila de llamadas, que está abierta de forma predeterminada en el panel inferior derecho.Click the Call Stack window while you are debugging, which is by default open in the lower right pane.

Examen de la pila de llamadasExamine the Call Stack

En la ventana Pila de llamadas se muestra el orden en el que se llama a los métodos y las funciones.The Call Stack window shows the order in which methods and functions are getting called. En la línea superior se muestra la función actual (el método Update en este ejemplo).The top line shows the current function (the Update method in this example). En la segunda línea se muestra que se ha llamado a Update desde la propiedad Path.set, etc.The second line shows that Update was called from the Path.set property, and so on. La pila de llamadas es una buena forma de examinar y entender el flujo de ejecución de una aplicación.The call stack is a good way to examine and understand the execution flow of an app.

Note

La ventana Pila de llamadas es similar a la perspectiva de depuración de algunos IDE, como Eclipse.The Call Stack window is similar to the Debug perspective in some IDEs like Eclipse.

Puede hacer doble clic en una línea de código para ver ese código fuente. De este modo, también puede cambiar el ámbito que el depurador va a inspeccionar.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. Eso no hace avanzar el depurador.This does not advance the debugger.

También puede usar los menús contextuales de la ventana Pila de llamadas para hacer otras cosas.You can also use right-click menus from the Call Stack window to do other things. Por ejemplo, puede insertar puntos de interrupción en funciones concretas, reiniciar la aplicación mediante Ejecutar hasta el cursor y examinar el código fuente.For example, you can insert breakpoints into specific functions, restart your app using Run to Cursor, and to go examine source code. Vea Cómo: Examinar la pila de llamadas.See How to: Examine the Call Stack.

Examinar una excepciónExamine an exception

Cuando la aplicación produce una excepción, el depurador le lleva a la línea de código que ha producido esa excepción.When your app throws an exception, the debugger takes you to the line of code that threw the exception.

Asistente de excepcionesException Helper

En este ejemplo, el Asistente de excepciones muestra una excepción System.Argument y un mensaje de error que indica que la ruta de acceso no tiene un 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. Por lo tanto, se sabe que el error se ha producido en un argumento de método o función.So, we know the error occurred on a method or function argument.

En este ejemplo, la llamada a DirectoryInfo ha producido el error en la cadena vacía almacenada en la variable value.In this example, the DirectoryInfo call gave the error on the empty string stored in the value variable.

El Asistente de excepciones es una característica excelente que puede ayudar a depurar errores.The Exception Helper is a great feature that can help you debug errors. También se pueden hacer cosas como ver detalles de errores y agregar una inspección desde el Asistente de excepciones.You can also do things like view error details and add a watch from the Exception Helper. O bien, si fuera necesario, se pueden cambiar las condiciones para producir la excepción concreta.Or, if needed, you can change conditions for throwing the particular exception. Para más información sobre cómo controlar las excepciones en el código, vea Técnicas y herramientas de depuración.For more information on how to handle exceptions in your code, see Debugging techniques and tools.

Note

El Asistente de excepciones ha reemplazado al Asistente de excepciones a partir de Visual Studio 2017Visual Studio 2017.The Exception Helper replaced the Exception Assistant starting in Visual Studio 2017Visual Studio 2017.

Expanda el nodo Configuración de excepciones para ver más opciones para controlar este tipo de excepción sin necesidad de cambiar nada de este paseo.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!

Depurar aplicaciones ASP.NET activas en Azure App ServiceDebug live ASP.NET apps in Azure App Service

Snapshot Debugger toma una instantánea de las aplicaciones en producción cuando se ejecuta el código que le interesa.the Snapshot Debugger takes a snapshot of your in-production apps when code that you are interested in executes. Para indicar al depurador que tome una instantánea, establezca puntos de acoplamiento y puntos de registro en el código.To instruct the debugger to take a snapshot, you set snappoints and logpoints in your code. El depurador le permite ver exactamente qué salió mal, sin afectar el tráfico de la aplicación de producción.The debugger lets you see exactly what went wrong, without impacting traffic of your production application. El Depurador de instantáneas puede permitirle disminuir considerablemente el tiempo que tarda en resolver los problemas que se producen en los entornos de producción.The Snapshot Debugger can help you dramatically reduce the time it takes to resolve issues that occur in production environments.

Inicio de Snapshot DebuggerLaunch the snapshot debugger

La recopilación de instantáneas está disponible para las aplicaciones ASP.NET que se ejecutan en Azure App Service.Snapshot collection is available for ASP.NET applications running in Azure App Service. Las aplicaciones ASP.NET deben ejecutarse en .NET Framework 4.6.1 o versiones posteriores y las aplicaciones ASP.NET Core en .NET Core 2.0 o versiones posteriores en 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 obtener más información, vea Depurar aplicaciones de ASP.NET Azure activas con el depurador de instantáneas.For more information, see Debug live ASP.NET apps using the Snapshot Debugger.

Ver las instantáneas con step-back de IntelliTrace (Visual Studio Enterprise)View snapshots with IntelliTrace step-back (Visual Studio Enterprise)

La característica step-back de IntelliTrace toma automáticamente una instantánea de la aplicación en cada punto de interrupción y evento de paso del depurador.IntelliTrace step-back automatically takes a snapshot of your application at every breakpoint and debugger step event. Las instantáneas registradas le permiten volver a puntos de interrupción anteriores y ver el estado de la aplicación tal y como estaba en un momento anterior.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. La característica step-back de IntelliTrace puede permitirle ahorrar tiempo cuando desea ver el estado anterior de la aplicación, pero no desea reiniciar la depuración ni volver a crear el estado de aplicación que se desea.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.

Para poder navegar y ver las instantáneas, use los botones Retroceder paso a paso y Avanzar paso a paso en la barra de herramientas de depuración.You can navigate and view snapshots by using the Step Backward and Step Forward buttons in the Debug toolbar. Estos botones permiten navegar por los eventos que aparecen en la pestaña Eventos en la ventana Herramientas de diagnóstico.These buttons navigate the events that appear in the Events tab in the Diagnostic Tools window.

Botones Retroceder paso a paso y Avanzar paso a pasoStep Backward and Forward Buttons

Para obtener más información, vea la página Inspeccionar el estado de aplicación anterior mediante step-back de IntelliTrace en Visual Studio.For more information, see the Inspect previous app states using IntelliTrace page.

Pasos siguientesNext steps

En este tutorial, ha echado un vistazo rápido a muchas características del depurador.In this tutorial, you've had a quick look at many debugger features. Es posible que quiera ahondar en alguna de estas características, como los puntos de interrupción.You may want a more in-depth look at one of these features, such as breakpoints.