Navegar por el código con el depurador de Visual StudioNavigate Code with the Visual Studio Debugger

Familiarizarse con los comandos y métodos abreviados para navegar por el código en el depurador y que hará que sea más rápida y sencilla buscar y resolver problemas de la aplicación.Get familiar with commands and shortcuts to navigate code in the debugger and that will make it faster and easier to find and resolve issues in your app. Mientras que navegar por el código en el depurador, puede inspeccionar el estado de la aplicación o más información sobre su flujo de ejecución.While you navigate code in the debugger, you can inspect the state of your app or learn more about its execution flow.

Iniciar depuraciónStart debugging

A menudo, iniciar una sesión de depuración con F5 (depurar > Iniciar depuración).Often, you start a debugging session using F5 (Debug > Start Debugging). Este comando inicia la aplicación con el depurador adjunto.This command starts your app with the debugger attached.

También, en la flecha verde inicia el depurador (igual que F5).The green arrow also starts the debugger (same as F5).

DBG_Fundamentos_iniciar_depuraciónDBG_Basics_Start_Debugging

Algunas otras formas de iniciar la aplicación con el depurador adjunto incluyen F11 (ir al código), F10 (paso a través de código), o mediante usar ejecutar hasta el Cursor.A few other ways that you can start the app with the debugger attached include F11 (step into code), F10 (step over code), or by using Run to Cursor. Vea las demás secciones de este tema para obtener información acerca de qué hacer estas opciones.See the other sections in this topic for info on what these options do.

Al depurar, la línea amarilla muestra el código que se ejecutará a continuación.When you debug, the yellow line shows you the code that will execute next.

DBG_Basics_Break_ModeDBG_Basics_Break_Mode

Durante la depuración, puede alternar entre los comandos, como F5, F11 y usar otras características descritas en este tema (por ejemplo, los puntos de interrupción) para obtener acceso rápidamente al código que desea examinar.While debugging, you can switch between commands like F5, F11 and use other features described in this topic (like breakpoints) to quickly get to the code you want to look at.

Mayoría de las características de depurador, como la presentación de valores de las variables en la ventana variables locales o la evaluación de expresiones en la ventana Inspección, está disponible solo mientras el depurador está en pausa (también denominada el modo de interrupción).Most debugger features, such as viewing variable values in the Locals window or evaluating expressions in the Watch window, are available only while the debugger is paused (also called break mode). Cuando el depurador está en pausa, el estado de la aplicación se suspende durante las funciones, variables, y los objetos se mantienen en la memoria.When the debugger is paused, your app state is suspended while functions, variables, and objects remain in memory. En el modo de interrupción, puede examinar las posiciones de los elementos y Estados para buscar infracciones o errores.While in break mode, you can examine the elements' positions and states to look for violations or bugs. Para algunos tipos de proyecto, también puede realizar ajustes en la aplicación mientras está en modo de interrupción.For some project types, you can also make adjustments to the app while in break mode. Para ver un vídeo que muestra estas características, vea introducción con el depurador.To watch a video showing these features, see Getting Started with the Debugger.

Ir al código, línea por líneaStep into code, line by line

Para detener en cada línea de código (cada instrucción) durante la depuración, utilice la F11 método abreviado de teclado (o depurar > paso a paso en el menú).To stop on each line of code (each statement) while debugging, use the F11 keyboard shortcut (or Debug > Step Into on the menu).

Tip

Tal y como se ejecuta cada línea de código, puede mantener el mouse sobre las variables para disfrutar de sus valores, o use el locales y inspección para observar sus valores cambie.As you execute each line of code, you can hover over variables to see their values, or use the Locals and Watch windows to watch their values change.

A continuación encontrará algunos detalles acerca del comportamiento del paso a paso:Here are some details about the behavior of Step Into:

  • En una llamada a una función anidada, Paso a paso por instrucciones llega hasta la función más profundamente anidada.On a nested function call, Step Into steps into the most deeply nested function. Si utiliza Paso a paso por instrucciones en una llamada como Func1(Func2()), el depurador ejecuta paso a paso las instrucciones de la función Func2.If you use Step Into on a call like Func1(Func2()), the debugger steps into the function Func2.

  • El depurador recorre paso a paso las instrucciones del código en lugar de las líneas físicas.The debugger actually steps through code statements rather than physical lines. Por ejemplo, una cláusula if se puede escribir en una línea:For example an if clause can be written on one line:

    int x = 42;  
    string s = "Not answered";  
    if( int x == 42) s = "Answered!";  
    
    Dim x As Integer = 42  
    Dim s As String = "Not answered"  
    If x = 42 Then s = "Answered!"  
    

    Cuando esta línea se ejecuta paso a paso por instrucciones, el depurador trata la condición como un paso y el resultado como otro (en este ejemplo, la condición es true).When you step into this line, the debugger treats the condition as one step and the consequence as another (In this example, the condition is true).

    Para realizar un seguimiento la pila de llamadas durante la ejecución paso a paso en funciones, vea asignar métodos en la pila de llamadas durante la depuración.To visually trace the call stack while stepping into functions, see Map methods on the call stack while debugging.

Recorrer el código, omitiendo las funcionesStep through code, skipping functions

Cuando se ejecuta código en el depurador, a menudo se dará cuenta de que no es necesario ver lo que ocurre en una función concreta (no le interesa, o sabe funciona, que el código de biblioteca probada).When running code in the debugger, often you will realize that you don't need to see what happens in a particular function (you don't care about it or you know it works, like well-tested library code). Utilice estos comandos para omitir a través del código (las funciones todavía se ejecutan, por supuesto, pero el depurador omite sobre ellos).Use these commands to skip through code (the functions still execute, of course, but the debugger skips over them).

Comando de tecladoKeyboard Command Comando de menúMenu Command DescripciónDescription
F10F10 Paso a paso por procedimientosStep Over Si la línea actual contiene una llamada de función, paso a paso por se ejecuta el código, a continuación, suspende la ejecución en la primera línea de código después de que vuelva la función llamada.If the current line contains a function call, Step Over runs the code then suspends execution at the first line of code after the called function returns.
MAYÚS + F11Shift+F11 Paso a paso para salirStep Out Paso a paso fuera continúa ejecutándose el código y suspende la ejecución cuando devuelve de la función actual (el depurador se salta a través de la función actual).Step Out continues running code and suspends execution when the current function returns (the debugger skips through the current function).

Tip

Si necesita buscar el punto de entrada en la aplicación, comience con F10 o F11.If you need to find the entry point in your app, start with F10 or F11. Estos comandos suelen ser útiles al inspeccionar el estado de la aplicación o tratar de buscar más información acerca de su flujo de ejecución.These commands are often helpful when you are inspecting your app state or trying to find out more about its execution flow.

Ejecutar hasta una ubicación específica o funciónRun to a specific location or function

A menudo el método preferido de la depuración de código, estos métodos son útiles cuando se sabe exactamente qué código que desee inspeccionar, o al menos sabe donde desea iniciar la depuración.Often the preferred method of debugging code, these methods are useful when you know exactly what code you want to inspect, or at least you know where you want to start debugging.

  • Establecer puntos de interrupción en el códigoSet breakpoints in the code

    Para establecer un punto de interrupción simple en el código, abra el archivo de código fuente en el editor de Visual Studio.To set a simple breakpoint in your code, open the source file in the Visual Studio editor. Establezca el cursor en la línea de código donde desea suspender la ejecución y, a continuación, haga clic en la ventana de código para ver el menú contextual y elija punto de interrupción > Insertar punto de interrupción (o presione F9).Set the cursor at the line of code where you want to suspend execution, and then right-click in the code window to see the context menu and choose Breakpoint > Insert Breakpoint (or press F9). El depurador suspende la derecha de la ejecución antes de ejecuta la línea.The debugger suspends execution right before the line is executed.

    Establecer un punto de interrupciónSet a breakpoint

    Los puntos de interrupción proporcionan un amplio conjunto de funcionalidades adicionales en Visual Studio, como los puntos de interrupción condicionales y de seguimiento.Breakpoints in Visual Studio provide a rich set of additional functionality, such as conditional breakpoints and tracepoints. Vea usar puntos de interrupción.See Using Breakpoints.

  • Ejecutar un proceso hasta la ubicación del cursorRun to the cursor location

    Para ejecutar un proceso hasta la ubicación del cursor, coloque el cursor en una línea de código ejecutable de una ventana de código fuente.To run to the cursor location, place the cursor on an executable line of code in a source window. En el menú del editor contexto (botón secundario en el editor), elija ejecutar hasta el Cursor.On the editor's context menu (right-click in the editor), choose Run to Cursor. Esto es igual que establecer un punto de interrupción temporal.This is like setting a temporary breakpoint.

  • Ejecutar, haga clic enRun to Click

    Para ejecutar un punto en el código mientras está en pausa en el depurador, seleccione la ejecutar aquí icono de flecha verde (para que aparezca el icono al mantener el mouse sobre una línea de código).To run to a point in your code while paused in the debugger, select the Run execution to here green arrow icon (you see the icon while hovering over a line of code). Esto elimina la necesidad de establecer puntos de interrupción temporales.This eliminates the need to set temporary breakpoints.

    Depurador de ejecutarse, haga clic enDebugger's Run to Click

    Note

    Ejecutar, haga clic en es nuevo en Visual Studio 2017Visual Studio 2017.Run to Click is new in Visual Studio 2017Visual Studio 2017.

  • Interrumpir el código manualmenteManually break into code

    Para interrumpir en la siguiente línea de código disponible de una aplicación en ejecución, elija Depurar, Interrumpir todos (teclado: Ctrl+Alt+Break).To break into the next available line of code in an executing app, choose Debug, Break All (keyboard: Ctrl+Alt+Break).

    Si interrumpe el código mientras se está ejecutando sin los archivos de código fuente o de símbolos (archivos .pdb) correspondientes, el depurador mostrará una página con el mensaje No se encontraron archivos de código fuente o No se encontraron símbolos que le permitirá encontrar los archivos adecuados.If you break while executing code without corresponding source or symbol (.pdb) files), the debugger displays a Source Files Not Found or a Symbols Not Found page that can help you find the appropriate files. Vea especificar símbolos (.pdb) y archivos de código fuente.See Specify Symbol (.pdb) and Source Files. Si no puede obtener acceso a los archivos de compatibilidad, aún puede depurar las instrucciones de ensamblado en la ventana Desensamblado.If you can't access the supporting files, you can still debug the assembly instructions in the Disassembly window.

  • Ejecutar un proceso hasta una función de la pila de llamadasRun to a function on the call stack

    En el pila de llamadas ventana (disponible durante la depuración), seleccione la función, haga clic en y elija ejecutar hasta el Cursor.In the Call Stack window (available while debugging), select the function, right-click and choose Run to Cursor. Para realizar un seguimiento la pila de llamadas, vea asignar métodos en la pila de llamadas durante la depuración.To visually trace the call stack, see Map methods on the call stack while debugging.

  • Ejecutar un proceso hasta una función especificada por nombreRun to a function specified by name

    Puede indicar al depurador que ejecute la aplicación hasta que llegue a una función especificada.You can tell the debugger to run your application until it reaches a specified function. Puede especificar la función por su nombre o elegirla en la pila de llamadas.You can specify the function by name or you can choose it from the call stack.

    Para especificar una función por su nombre, elija Depurar, Nuevo punto de interrupción, Interrumpir en funcióny escriba el nombre de la función y otra información de identificación.To specify a function by name, choose Debug, New Breakpoint, Break at Function, then enter the name of the function and other identifying information.

    Cuadro de diálogo nuevo punto de interrupciónNew Breakpoint dialog box

    Si la función se sobrecarga o está en varios espacios de nombres, puede elegir las funciones que desee en el cuadro de diálogo Elegir puntos de interrupción .If the function is overloaded or is in multiple namespace, you can choose the functions that you want in the Choose Breakpoints dialog box.

    Elija el cuadro de diálogo de los puntos de interrupciónChoose Breakpoints dialog box

Mueva el puntero para cambiar el flujo de ejecuciónMove the pointer to change the execution flow

Cuando el depurador está pausado, puede mover el puntero de instrucción para establecer la siguiente instrucción de código que se ejecuta.While the debugger is paused, you can move the instruction pointer to set the next statement of code to be executed. Una flecha amarilla en el margen de una ventana de código fuente o de la ventana Desensamblado indica la ubicación de la siguiente instrucción que se debe ejecutar.A yellow arrowhead in the margin of a source or Disassembly window marks the location of the next statement to be executed. Moviendo esta flecha, puede saltarse una parte del código o volver a una línea previamente ejecutada.By moving this arrowhead, you can skip over a portion of code or return to a line previously executed. Puede utilizar esto en situaciones como la omisión de una sección de código que contiene un error conocido.You can use this for situations such as skipping a section of code that contains a known bug.

Mueva el punteroMoving the Pointer

Para establecer la siguiente instrucción que se debe ejecutar, siga uno de estos procedimientos:To set the next statement to execute, use one of these procedures:

  • En una ventana de código fuente, arrastre la flecha amarilla hasta la ubicación en la que desea establecer la siguiente instrucción, dentro del mismo archivo de código fuente.In a source window, drag the yellow arrowhead to a location where you want to set the next statement in the same source file

  • En una ventana de código fuente, establezca el cursor en la línea que desea ejecutar a continuación, haga clic en y elija Establecer instrucción siguiente.In a source window, set the cursor on the line that you want to execute next, right-click and choose Set Next Statement.

  • En la ventana Desensamblado, establezca el cursor en la instrucción de ensamblado que desea ejecutar a continuación, haga clic en una y elija Establecer instrucción siguiente.In the Disassembly window, set the cursor on the assembly instruction that you want to execute next, right-click an and choose Set Next Statement.

Caution

Al establecer la siguiente instrucción, el contador del programa salta directamente a la nueva ubicación.Setting the next statement causes the program counter to jump directly to the new location. Utilice este comando con precaución.Use this command with caution:

  • No se ejecutan las instrucciones entre los puntos de ejecución anteriores y nuevos.Instructions between the old and new execution points are not executed.
    • Si mueve el punto de ejecución hacia atrás, no se deshacen las instrucciones intermedias.If you move the execution point backwards, intervening instructions are not undone.
    • Al mover la instrucción siguiente a otro ámbito o función normalmente se producen daños en la pila de llamadas y un error o excepción en tiempo de ejecución.Moving the next statement to another function or scope usually results in call-stack corruption, causing a run-time error or exception. Si intenta mover la instrucción siguiente a otro ámbito, el depurador abre un cuadro de diálogo con una advertencia que le ofrece la oportunidad de cancelar la operación.If you try moving the next statement to another scope, the debugger opens a dialog box with a warning and gives you a chance to cancel the operation. En Visual Basic, no puede mover la instrucción siguiente a otro ámbito o función.In Visual Basic, you cannot move the next statement to another scope or function.
    • En C++ nativo, si ha habilitado comprobaciones en tiempo de ejecución, al establecer la instrucción siguiente se puede producir una excepción cuando la ejecución llegue al final del método.In native C++, if you have run-time checks enabled, setting the next statement can cause an exception to be thrown when execution reaches the end of the method.
    • Cuando la opción Editar y continuar está habilitada, Establecer instrucción siguiente genera un error si se han realizado modificaciones que Editar y continuar no puede reasignar inmediatamente.When Edit and Continue is enabled, Set Next Statement fails if you have made edits that Edit and Continue cannot remap immediately. Esto puede suceder, por ejemplo, si se ha editado código en un bloque catch.This can occur, for example, if you have edited code inside a catch block. Cuando esto sucede, verá un mensaje de error que indica que la operación no es compatible.When this happens, you'll see an error message that tells you that the operation is not supported.

Note

En código administrado, no puede mover la instrucción siguiente en las situaciones siguientes:In managed code, you cannot move the next statement under the following conditions:

  • La instrucción siguiente está en un método diferente de la instrucción actual.The next statement is in a different method than the current statement.
    • La depuración se inició a través de la depuración Just-In-Time.Debugging was started by using Just-In-Time debugging.
    • Un desenredo de la pila de llamadas está en curso.A callstack unwind is in progress.
    • Se ha producido una excepción System.StackOverflowException o System.Threading.ThreadAbortException.A System.StackOverflowException or System.Threading.ThreadAbortException exception has been thrown.

No se puede establecer la siguiente instrucción mientras se está ejecutando activamente la aplicación.You cannot set the next statement while your application is actively running. Para establecer la siguiente instrucción, el depurador debe estar en modo de interrupción.To set the next statement, the debugger must be in break mode.

Ir al código no es de usuarioStep into non-user code

De forma predeterminada, el depurador intenta mostrar solo el código de la aplicación durante la depuración, que viene determinada por un depurador llamada solo mi código.By default, the debugger tries to show you only your app code while debugging, which is determined by a debugger setting called Just My Code. (Consulte solo mi código para ver cómo funciona esto para diferentes tipos de proyectos y lenguajes y cómo puede personalizar el comportamiento.) Sin embargo, a veces durante la depuración, puede buscar en el código de framework, código de biblioteca de otro fabricante o las llamadas al sistema operativo (llamadas del sistema).(See Just My Code to see how this works for different project types and languages and how you might customize the behavior.) However, sometimes while you are debugging, you might want to look at framework code, third-party library code, or calls to the operating system (system calls).

Puede desactivar sólo mi código, vaya a herramientas > opciones > depuración y desactive el habilitar solo mi código casilla de verificación.You can turn off Just My Code by going to Tools > Options > Debugging and clear the Enable Just My Code checkbox.

Si sólo mi código está deshabilitada, el depurador puede ir al código de no usuario y código de usuario no aparece en las ventanas del depurador.When Just My Code is disabled, the debugger can step into non-user code and non-user code appears in the debugger windows.

Note

Sólo mi código no se admite para los proyectos de dispositivos.Just My Code is not supported for device projects.

Ir a llamadas del sistemaStep into system calls

Si ha cargado símbolos de depuración para el código del sistema y solo mi código no está habilitado, puede ir en una llamada del sistema al igual que lo haría con cualquier otra llamada.If you have loaded debugging symbols for system code and Just My Code is not enabled, you can step into a system call just as you can any other call.

Para obtener acceso a archivos de símbolos de Microsoft, consulte usar servidores de símbolos para buscar archivos de símbolos no en el equipo local en el especificar símbolos (.pdb) y archivos de código fuente tema.To access Microsoft symbol files, see Use symbol servers to find symbol files not on your local machine in the Specify Symbol (.pdb) and Source Files topic.

Para cargar los símbolos de un componente del sistema específico durante la depuración:To load symbols for a specific system component while you are debugging:

  1. Abra la ventana Módulos (teclado: Ctrl + Alt + U).Open the Modules window (keyboard: Ctrl + Alt + U).

  2. Seleccione el módulo para el que desea cargar los símbolos.Select the module that you want to load symbols for.

    Puede indicar qué módulos tienen cargados los símbolos examinando la columna Estado del símbolo .You can tell which modules have symbols loaded by looking at the Symbol Status column.

  3. Elija Cargar símbolos en el menú contextual.Choose Load Symbols on the context menu.

Ir a propiedades y operadores en código administradoStep into properties and operators in managed code

El depurador se salta las propiedades y los operadores en código administrado de forma predeterminada.The debugger steps over properties and operators in managed code by default. En la mayoría de los casos, esto proporciona una mejor experiencia de depuración.In most cases, this provides a better debugging experience. Para habilitar la ejecución paso a paso a las propiedades y operadores, elija depurar > opciones.To enable stepping into properties or operators, choose Debug > Options. En el depuración > General página, desactive la saltar propiedades y operadores (solo administrado) casilla de verificaciónOn the Debugging > General page, clear the Step over properties and operators (Managed only) check box