visual una studio scripts puedo modo interrupcion hacer habilitada está encuentra depurar depuración depuracion debuggear debug como chrome aplicacion c# .net visual-studio debugging

c# - una - DebuggerDisplay en la clase genérica



la depuración de scripts de chrome en visual studio está habilitada (3)

Tengo un problema al aplicar el atributo DebuggerDisplay en una clase genérica:

[DebuggerDisplay("--foo--")] class Foo { } [DebuggerDisplay("Bar: {t}")] class Bar<T> { public T t; }

Al inspeccionar un objeto de tipo Bar<Foo> esperaría que se muestre como Bar: --foo-- , pero obtengo Bar: {Foo}

¿Qué estoy haciendo mal?


El atributo DebuggerDisplay no es recursivo. El {} dentro de la cadena básicamente dice evaluar esta expresión y mostrar el resultado en línea. La cadena para el resultado interno se calcula como si no hubiera un atributo DebuggerDisplay en juego para tipo o miembro. Es por eso que ves {Foo} en lugar de --foo--.

La razón de esto es la fiabilidad. Es demasiado fácil tener etiquetas de atributos DebuggerDisplay mutuamente recursivas. Esto causaría un desbordamiento de pila o un bucle infinito al evaluar una expresión interna. La evaluación no recursiva del atributo DebuggerDisplay evita esta recursión infinita (aunque todavía es bastante posible que el usuario la cree ellos mismos dentro de una expresión particular).

Una forma de controlar la forma en que se muestra la expresión interna es anulando el método .ToString (). Esto se evaluará al calcular la cadena de visualización para una expresión interna.



[Descargo de responsabilidad: estoy afiliado a OzCode]

Puede usar la función Revelar de OzCode que admite información de depuración anidada / recursiva.
Una vez que lo haya definido para una instancia, se usará automáticamente para todas las instancias de ese tipo.