tag propiedad objetos dinamicos c# visual-studio debugging visual-studio-2010

objetos - propiedad tag c#



Visual Studio 2010-Interrumpa cualquier cosa que cambie una propiedad de objeto (5)

Haga clic con el botón derecho en el punto rojo que representa el punto de interrupción: elija Condition e ingrese la expresión cuando desee que el punto de interrupción interrumpa la ejecución, o marque Has changed para romperse cada vez que cambia el valor.

¿Es posible en Visual Studio 2010 interrumpir cualquier cosa (un método, por ejemplo) que cambie la propiedad de un objeto?

¿O es posible averiguar si las propiedades del objeto cambiaron en una aplicación de formularios web de ASP.NET?

Actualizar:

La respuesta correcta se puede encontrar en: http://stackoverflow.com/questions/2682613/cant-set-breakpoints-on-an-auto-property-setter-why/6713920#6713920


No creo que haya una forma en VS IDE que te permita establecer un punto de interrupción general como ese. Si realmente necesita esto y desea hacer algunos cambios de código, puede echar un vistazo a los métodos parciales . Usando métodos parciales, define un método parcial y lo llama desde sus configuradores. Cuando desee depurar para averiguar quién llama a un definidor, puede proporcionar una implementación ficticia del método parcial. Cuando haya terminado la depuración, puede deshacerse de la implementación y el compilador no generará nada relacionado con ese método como si no existiera. Esto contamina su código a menos que pueda pensar en otros usos potenciales de una llamada de método parcial de sus configuradores. Sin embargo, solo quería tirarlo para que lo sepas.


Parece que está solicitando una característica que haría que Visual Studio se rompa cada vez que se cambia una propiedad / campo en un objeto.

Para propiedades puedes hacer esto con puntos de interrupción normales y condicionales. Simplemente configure el punto de interrupción en el establecedor de propiedades, haga clic con el botón derecho y seleccione condicional. Luego, agregue una comprobación simple para ver si el nuevo valor y el valor existente son diferentes

value != backingField

Para los campos realmente no hay una buena solución. El depurador de C ++ tiene una característica llamada Data BreakPoints que tiene exactamente este comportamiento. Pero no están disponibles para los idiomas administrados, principalmente porque el depurador CLR no los admite. Lo mejor que puedes hacer es cambiar temporalmente tu campo a una propiedad y usar el método anterior.


Puede usar el método System.Diagnoistic.Debugger.Break () para su propósito de la siguiente manera

if(x!= y) Debugger.Break()


Si tiene control sobre el código que declara la propiedad, entonces ciertamente puede poner un punto de interrupción dentro del establecedor. Incluso si actualmente es una propiedad implementada automáticamente, por ejemplo:

public string SomeProperty { get; set; }

Puedes cambiarlo fácilmente así:

private string _someProperty; public string SomeProperty { get { return _someProperty; } set { // Set breakpoint here, or type Debugger.Break(); _someProperty = value; } }

Si el valor es en realidad un campo en lugar de una propiedad , aún puede cambiarlo en una propiedad para lograr lo mismo.

Si no tiene acceso al código que declara la propiedad, entonces es un poco más difícil. Personalmente, lo que hago es esto, pero es un poco laborioso:

  1. Declare un campo estático público en su clase de programa del tipo que declara la propiedad.

  2. Al principio del programa, encuentre una referencia al objeto cuyo valor de propiedad cambie y coloque esa referencia en este campo estático. Si es necesario, use Reflexión para recuperar campos privados.

  3. Agregue global::MyNamespace.Program.MyField.ImportantProperty a la ventana de global::MyNamespace.Program.MyField.ImportantProperty mientras realiza la depuración.

  4. Recorra el código hasta que cambie el valor en la ventana de visualización.