Nota
O acceso a esta páxina require autorización. Pode tentar iniciar sesión ou modificar os directorios.
O acceso a esta páxina require autorización. Pode tentar modificar os directorios.
Mientras está depurando, puede usar las ventanas de Supervisión y Supervisión rápida para ver las variables y expresiones. Las ventanas solo están disponibles durante una sesión de depuración.
Las ventanas de observación pueden mostrar varias variables a la vez durante la depuración. El cuadro de diálogo QuickWatch muestra una sola variable a la vez y debe cerrarse antes de que la depuración pueda continuar. Para obtener más información sobre el uso de QuickWatch, vea Observar una sola variable o expresión con QuickWatch.
Nota:
Si no está familiarizado con el código de depuración, es posible que quiera leer Depuración para principiantes absolutos y herramientas y técnicas de depuración antes de pasar por este artículo.
Observar variables con una ventana de vigilancia
Puede abrir más de una ventana Inspección y observar más de una variable en una ventana Inspección .
Por ejemplo, para establecer una inspección en los valores de a, by c en el código siguiente:
int main()
{
int a, b, c;
a = 1;
b = 2;
c = 0;
for (int i = 0; i < 10; i++)
{
a++;
b *= 2;
c = a + b;
}
return 0;
}
Establezca un punto de interrupción en la línea
c = a + b;haciendo clic en el margen izquierdo, seleccionando Depurar>, o presionando F9.Para iniciar la depuración, seleccione la flecha inicio verde o Depurar>, o presione F5. La ejecución se detiene en el punto de interrupción.
Abra una ventana Watch seleccionando Depurar>Windows>Ver>Watch 1, o presionando Ctrl+Alt+W>1.
Puede abrir más ventanas Inspección seleccionando ventanas 2, 3 o 4.
En la ventana Inspección , seleccione una fila vacía y escriba la variable
a. Haga lo mismo parabyc.
Para continuar con la depuración, seleccione Depurar>Entrar o presione F11 según sea necesario para avanzar. Los valores de variable de la ventana Inspección cambian a medida que recorre en iteración el
forbucle.
Nota:
Solo para C++,
Es posible que tenga que calificar el contexto de un nombre de variable o una expresión que use un nombre de variable. El contexto es la función, el archivo de origen o el módulo donde se encuentra una variable. Si tiene que calificar el contexto, use la sintaxis del operador de contexto (C++) en el Name de la ventana Watch.
Puede agregar nombres de registro y nombres de variable utilizando $<register name> o @<register name> al Nombre en la ventana Inspección. Para obtener más información, consulte Pseudovariables.
Usar expresiones en una ventana de inspección
Puede observar cualquier expresión válida reconocida por el depurador en una ventana Watch.
Por ejemplo, para el código de la sección anterior, puede obtener el promedio de los tres valores escribiendo (a + b + c) / 3 en la ventana Inspección :
Las reglas para evaluar expresiones en la ventana Inspección suelen ser las mismas que las reglas para evaluar expresiones en el lenguaje de código. Si una expresión tiene un error de sintaxis, espere el mismo error del compilador que en el editor de código. Por ejemplo, un error tipográfico en la expresión anterior genera este error en la ventana Inspección :
Un círculo con dos líneas onduladas puede aparecer en la ventana Watch. Este icono significa que el depurador no evalúa la expresión debido a una posible dependencia entre subprocesos. La evaluación del código requiere que otros subprocesos de la aplicación se ejecuten temporalmente, pero como está en modo de interrupción, normalmente se detienen todos los subprocesos de la aplicación. Permitir que otros subprocesos se ejecuten temporalmente pueden tener efectos inesperados en el estado de la aplicación y el depurador podría omitir eventos como puntos de interrupción y excepciones en esos subprocesos.
Buscar en la ventana de observación
Puede buscar palabras clave en las columnas Nombre, Valor y Tipo de la ventana Watch mediante la barra de búsqueda situada encima de cada ventana. Presione ENTRAR o seleccione una de las flechas para ejecutar una búsqueda. Para cancelar una búsqueda en curso, seleccione el icono "x" en la barra de búsqueda.
Use las flechas izquierda y derecha (Mayús+F3 y F3, respectivamente) para desplazarse por las coincidencias encontradas.
Para que la búsqueda sea más o menos exhaustiva, use la lista desplegable Buscar más profunda en la parte superior de la ventana Inspección para seleccionar cuántos niveles de profundidad desea buscar en objetos anidados.
Fijar propiedades en la ventana de Inspección
Nota:
Esta característica se admite en .NET Core 3.0 o superior.
Puede inspeccionar rápidamente los objetos por sus propiedades en la ventana de observación con la herramienta Propiedades anclables. Para usar esta herramienta, mantenga el puntero sobre una propiedad y seleccione el icono Anclar que aparece o haga clic con el botón derecho y seleccione la opción Anclar miembro como favorito en el menú contextual resultante. Esta acción propaga esa propiedad a la parte superior de la lista de propiedades del objeto y el nombre y el valor de la propiedad se muestran en la columna Valor . Para desanclar una propiedad, vuelva a seleccionar el icono para anclar o seleccione la opción Desanclar miembro como favorito en el menú contextual.
También puede alternar los nombres de propiedad y filtrar las propiedades no ancladas al ver la lista de propiedades del objeto en la ventana Inspección. Puede acceder a ambas opciones seleccionando los botones de la barra de herramientas encima de la ventana de inspección.
Actualizar valores de monitoreo
Un icono de actualización (flecha circular) puede aparecer en la ventana Inspección cuando se evalúa una expresión. El icono de actualización indica un error o un valor que no está actualizado.
Para actualizar el valor, seleccione el icono de actualización o presione la barra espaciadora. El depurador intenta reevaluar la expresión. Sin embargo, es posible que no desee o que pueda volver a evaluar la expresión, en función de por qué no se haya evaluado el valor.
Mantenga el puntero sobre el icono de actualización o vea la columna Valor por el motivo por el que no se evaluó la expresión. Entre los motivos se incluyen:
Error al evaluar la expresión, como en el ejemplo anterior. Puede producirse un tiempo de espera o una variable podría estar fuera del ámbito.
La expresión tiene una llamada de función que podría desencadenar un efecto secundario en la aplicación. Vea Efectos secundarios de las expresiones.
La evaluación automática de propiedades y llamadas a funciones implícitas está deshabilitada.
Si aparece el icono de actualización porque la evaluación automática de las propiedades y las llamadas a funciones implícitas está deshabilitada, puede actualizar la configuración de depuración desde el menú Opciones de herramientas>.
Para mostrar cómo usar el icono de actualización:
- En el panel Herramientas (o Depurar) >Opciones , en la sección Todas las configuraciones>Depuración>General , desactive la casilla Habilitar evaluación de propiedades y otras llamadas a funciones implícitas .
- En el cuadro de diálogo Herramientas (o Depurar) >Opciones , en la sección Depuración>general , desactive la casilla Habilitar evaluación de propiedades y otras llamadas de función implícitas .
Escriba el código siguiente y, en la ventana Inspección, establezca una observación en la
list.Countpropiedad.static void Main(string[] args) { List<string> list = new List<string>(); list.Add("hello"); list.Add("goodbye"); }Inicie la depuración. La ventana Watch muestra algo parecido al siguiente mensaje:
Para actualizar el valor, seleccione el icono de actualización o presione la barra espaciadora. El depurador vuelve a evaluar la expresión.
Efectos secundarios de expresión
Evaluar algunas expresiones puede cambiar el valor de una variable o afectar de otro modo al estado de la aplicación. Por ejemplo, la evaluación de la expresión siguiente cambia el valor de var1:
var1 = var2
Este código puede provocar un efecto secundario. Los efectos secundarios pueden dificultar la depuración cambiando la forma en que funciona la aplicación.
Una expresión con efectos secundarios solo se evalúa una vez, cuando se introduce por primera vez. Después de eso, la expresión aparece atenuada en la ventana Watch y se desactivan las evaluaciones adicionales. El mensaje emergente o la columna Valor explica que la expresión provoca un efecto secundario. Puede forzar la reevaluación seleccionando el icono de actualización que aparece junto al valor.
Una manera de evitar la designación de efectos secundarios es desactivar la evaluación automática de funciones. En el panel Herramientas (o Depurar) >Opciones , en la sección Todas las configuraciones>Depuración>General , desactive la casilla Habilitar evaluación de propiedades y otras llamadas a funciones implícitas .
Una manera de evitar la designación de efectos secundarios es desactivar la evaluación automática de funciones. En el cuadro de diálogo Herramientas (o Depurar) >Opciones , en la sección Depuración>general , desactive la casilla Habilitar evaluación de propiedades y otras llamadas de función implícitas .
Solo para C#, cuando la evaluación de propiedades o llamadas implícitas a funciones está desactivada, puede forzar la evaluación agregando el modificador de formato ac a una variable Name en la ventana Watch. Consulte Especificadores de formato en C#.
Usar identificadores de objeto en la ventana de inspección (C# y Visual Basic)
A veces quiere observar el comportamiento de un objeto específico. Por ejemplo, es posible que quiera realizar un seguimiento de un objeto al que hace referencia una variable local después de que esa variable se haya quedado fuera del ámbito. En C# y Visual Basic, puede crear identificadores de objeto para instancias específicas de tipos de referencia y usarlas en la ventana Inspección y en condiciones de punto de interrupción. El identificador de objeto es generado por los servicios de depuración del Common Language Runtime (CLR) y se asocia al objeto.
Nota:
Los ID de objetos crean referencias débiles que no impiden que el objeto se recoja por el recolector de basura. Solo son válidos para la sesión de depuración actual.
En el código siguiente, el MakePerson() método crea un Person mediante una variable local:
class Person
{
public Person(string name)
{
Name = name;
}
public string Name { get; set; }
}
public class Program
{
static List<Person> _people = new List<Person>();
public static void Main(string[] args)
{
MakePerson();
DoSomething();
}
private static void MakePerson()
{
var p = new Person("Bob");
_people.Add(p);
}
private static void DoSomething()
{
// more processing
Console.WriteLine("done");
}
}
Para averiguar el nombre de
Establezca un punto de interrupción en el código después de crear el
Personobjeto.Inicie la depuración.
Cuando la ejecución se detiene en el punto de interrupción, abra la ventana Variables locales seleccionando Depurar>variables locales de>.
En la ventana Variables locales , haga clic con el botón derecho en la
Personvariable y seleccione Crear identificador de objeto.Debería ver un signo de dólar ($) más un número en la ventana Variables locales , que es el identificador de objeto.
Agregue el ID de objeto a la ventana Vigilancia con el botón derecho en el ID de objeto y seleccionando Agregar Vigilancia.
Establezca otro punto de interrupción en el
DoSomething()método .Continúe con la depuración. Cuando la ejecución se detiene en el
DoSomething()método , la ventana Inspección muestra elPersonobjeto .Si desea ver las propiedades del objeto, como
Person.Name, debe habilitar la evaluación de propiedades.En el panel Herramientas (o Depurar) >Opciones , en la sección Todas las opciones>de depuración>general , active la casilla Habilitar evaluación de propiedades y otras llamadas de función implícitas .
En el cuadro de diálogo Herramientas (o Depurar) >Opciones , en la sección Depuración>general , active la casilla Habilitar evaluación de propiedades y otras llamadas a funciones implícitas .
Vista dinámica y la ventana de inspección
Algunos lenguajes de scripting (por ejemplo, JavaScript o Python) usan escritura dinámica o de pato , y .NET versión 4.0 y versiones posteriores admiten objetos que son difíciles de observar en las ventanas de depuración normales.
La ventana Inspección muestra estos objetos como objetos dinámicos, que se crean a partir de tipos que implementan la IDynamicMetaObjectProvider interfaz. Los nodos de objeto dinámico muestran los miembros dinámicos de los objetos dinámicos, pero no permiten la edición de los valores de miembro.
Para actualizar los valores de vista dinámica , seleccione el icono de actualización situado junto al nodo de objeto dinámico.
Para mostrar solo la vista dinámica de un objeto, agregue un especificador de formato dinámico después del nombre del objeto dinámico en la ventana Inspección :
- Para C#:
ObjectName, dynamic - Para Visual Basic:
$dynamic, ObjectName
Nota:
- El depurador de C# no vuelve a evaluar automáticamente los valores de la vista dinámica cuando se pasa a la siguiente línea de código.
- El depurador de Visual Basic actualiza automáticamente las expresiones agregadas a través de la vista dinámica.
- Evaluar los miembros de una vista dinámica puede tener efectos secundarios.
Para insertar una nueva variable de observación que convierte un objeto en un objeto dinámico:
- Haga clic con el botón derecho en cualquier elemento secundario de una vista dinámica.
- Elija Añadir vigilancia. El
object.namese convierte en((dynamic) object).namey aparece en una nueva ventana Vigilancia.
El depurador también agrega un nodo secundario Vista dinámica del objeto a la ventana Autos. Para abrir la ventana Automático, durante la depuración, seleccione Depurar>automático de>.
La vista dinámica también mejora la depuración de objetos COM. Cuando el depurador llega a un objeto COM, encapsulado en System.__ComObject, agrega un nodo de Vista Dinámica para el objeto.
Observar una sola variable o expresión con QuickWatch
Puede usar QuickWatch para observar una sola variable.
Por ejemplo, para el código siguiente:
static void Main(string[] args)
{
int a, b;
a = 1;
b = 2;
for (int i = 0; i < 10; i++)
{
a = a + b;
}
}
Para observar la a variable,
Establezca un punto de interrupción en la línea
a = a + b;.Inicie la depuración. La ejecución se detiene en el punto de interrupción.
Seleccione la variable
aen el código.Seleccione Depurar>Inspección rápida, presione Mayús+F9 o haga clic con el botón derecho y seleccione Inspección rápida.
Aparece el cuadro de diálogo QuickWatch. La
avariable está en el cuadro Expresión con un valor de 1.
Para evaluar una expresión mediante la variable , escriba una expresión como
a + ben el cuadro Expresión y seleccione Reevaluar.
Para agregar la variable o expresión de QuickWatch a la ventana Inspección , seleccione Agregar inspección.
Seleccione Cerrar para cerrar la ventana Inspección rápida . (QuickWatch es un cuadro de diálogo modal, por lo que no puedes continuar depurando mientras esté abierto).
Continúe con la depuración. Puede observar la variable en la ventana Inspección .
Obtención de ayuda para la inteligencia artificial
Si tiene Copilot, puede obtener ayuda de Inteligencia Artificial mientras examina las variables en las ventanas de observación. Haga clic derecho en una variable y use el botón Ask Copilot
. En este escenario, Copilot ya conoce el contexto de su pregunta, por lo que no es necesario proporcionar contexto en el chat. Para obtener más información, consulte Depurar con Copilot.