2011-07-26 10 views
10

Me gustaría obtener ToString() para mostrar para una clase bajo mi control en modo de depuración.Cómo obtener ToString() para que aparezca en Debug

Sería bueno si esto fuera lo primero que apareciera al pasar el mouse por encima de una variable. ¿Hay algún atributo para esto?

+0

gracias a todos. Muy útil. – sgtz

Respuesta

21

Marque su clase con

[System.Diagnostics.DebuggerDisplay("{ToString()}")] 

prueba:

[System.Diagnostics.DebuggerDisplay("{ToString()}")] 
class MyClass 
{ 
    private string _foo = "This is the text that will be displayed at debugging" 

    public override string ToString() 
    { 
     return _foo; 
    } 
} 

Ahora cuando se pasa sobre una variable con el ratón se mostrará This is the text that will be displayed at debugging.

4

Lo que se busca es la DebuggerDisplayAttribute:

http://www.codeproject.com/Articles/117477/Using-DebuggerDisplayAttribute

Utilice el enlace anterior para ver cómo se hace y luego aplicar esto a su clase, utilizando el método ToString() para impulsar lo que se muestra. Solo he usado propiedades, no estoy seguro si puedes inyectar clases.

+0

+1 solo puede aceptar una respuesta, pero este enlace me da un ejemplo inmediato de lo que es posible. – sgtz

4

La salida de ToString debe ser la predeterminada que se ve al depurar.

Puede anularse utilizando el atributo DebuggerDisplay (consulte MSDN).

Prefiero reemplazar el método ToString porque es más fácil y más versátil porque ayuda al escribir en archivos de registro también.

¿Qué resultados ve? Si obtiene el nombre del tipo, verá el predeterminado ToString.

+0

+1. ty. ToString parece ser el lugar natural para ello en la mayoría de los casos. – sgtz

7

Hay DebuggerDisplayAttribute que le permite influir en la pantalla. Le permite escribir expresiones bastante complejas para producir la salida de depuración, aunque it is not recommended to do so.

Sin embargo, si ha reemplazado ToString, entonces el depurador está documentado para mostrar eso de forma predeterminada. Tal vez hay algo mal con el código?

+0

Disculpa que recibí el botón de edición incorrecto y mi reverso se superpuso con tu segunda edición :( – Zebi

+0

@Zebi: recuperado, no te preocupes. – Jon

+0

+1 no estoy seguro de lo que querían decir con acceso implícito, pero voy a tener en cuenta esos problemas de rendimiento . "Si la expresión hace referencia a propiedades, los atributos en esas propiedades no se procesan" es probablemente lo más importante de lo que hay que preocuparse. – sgtz

1

en el objeto Invalidar .ToString de la siguiente manera:

public class MyObject 
{ 
     public int Property1{ get; set; } 
     public string Property2{ get; set; } 
     public string Property3 { get; set; } 

     public override string ToString() 
     { 
      return Property3; 
     } 
} 

Esto devolverá Propiedad3 como el valor ToString()

0

Si está utilizando Visual Studio se podría añadir un reloj de tiempo de ejecución @ om la yourvariable.ToString() línea, esto aparecerá en la parte inferior de la pantalla cuando llegue a un punto de interrupción

+0

Si bien agregar una variable de reloj sirve para su propósito, no responde la pregunta. La pregunta era cómo hacer que tu variable muestre una información sobre herramientas cuando pasas el cursor sobre ella en modo de depuración. –

1

Tuve un problema similar. Mi clase tenía una anulación de ToString() y todavía no aparecía en VS, lo cual era extraño.

Al agregar el atributo [System.Diagnostics.DebuggerDisplay ("{ToString()}")] a la clase se mostró una excepción en el depurador de Visual Studio, donde debería haberse mostrado ToString. Resultó que tenía un error al utilizar incorrectamente string.Format() en mi implementación. Este es un comportamiento interesante: VS revierte a ToString predeterminado en caso de una excepción. El uso del atributo mencionado obliga a la pantalla a mostrar el resultado del método: válido o excepción. Esto es muy útil para depurar ToString().De lo contrario, no tiene sentido agregar este atributo explícitamente a cada clase, ya que las clases lo tienen activado de manera predeterminada, a menos que uno desee desactivar este comportamiento por alguna razón.

Cuestiones relacionadas