2010-02-17 21 views
22

¿Hay alguna manera de hacer que la ventana Inspección muestre todas las propiedades y campos heredados en una larga lista plana, en lugar de ocultarse detrás de un nodo "base" anidado?¿Aplansar miembros heredados en la ventana Inspección de Visual Studio?

Estoy depurando algunos códigos C# que hacen uso masivo de la herencia; algunas de las propiedades que quiero ver están detrás de tres niveles de "base" en la ventana Inspección. Esto sería más o menos soportable si solo quisiera examinar un solo objeto, pero en realidad estoy mirando un árbol de ellos ...

Respuesta

8

ver http://blogs.msdn.com/b/jaredpar/archive/2010/02/19/flattening-class-hierarchies-when-debugging-c.aspx

ACTUALIZACIÓN: me escribió una herramienta comercial llamada OzCode que resuelve este problema. La idea es que si está interesado en una propiedad de la clase base, puede "Star" esa propiedad, lo que hace que la propiedad aparezca en la parte superior de la lista de miembros, y también en el texto de su principal.

Así, por ejemplo, en el siguiente escenario, tuve que ampliar dos nodos de base para llegar a ver las propiedades que quería, "importante" y "interesante": No Stars

Pero una vez que STAR estas propiedades, siempre aparecerán en la parte superior, incluso cuando se ve variables del tipo derivado, por lo que veremos:

After adding stars

Estos stars se conservan y se mostrará cada vez que ve un objeto de ese tipo de el DataTip o QuickWatch wi ndow desde ese momento, así que la próxima vez que tenga una variable de ese tipo, no necesitará expandir esos nodos "base". Y debido a que los valores destacados aparecen como el texto del nodo padre, si está mirando la estructura de árbol de estos objetos fuertemente anidados (como usted dijo que era), podrá ver estas propiedades sin siquiera expandir los nodos.

DIVULGACIÓN COMPLETA: Soy el coautor de la herramienta que he descrito aquí.

+0

a) ¿Todavía existe esto? (su sitio está inactivo) b) ¿Funciona en todas las clases (clases nativas de .Net Framework)? – tbone

+0

@tbone a) Sí, el producto se cambió de marca con el nombre [OzCode] (http://www.oz-code.com), actualicé mi respuesta b) Sí, lo hace! –

+0

¿Ha probado los precios de A/B? Me encantaría tener esto, pero desembolsar $ 70 es un bloque psicológico bastante grande, incluso económicamente ilógico. – tbone

4

No como tal. Usted ve, es una característica! La capacidad de ver de dónde viene una propiedad es importante la mayor parte del tiempo.

Entiendo tu dolor sin embargo. Hay algunas soluciones alternativas. Primero, puede poner el object.property en la ventana del reloj. Esto solo mostrará la propiedad que está buscando. Es ideal para cavar en una propiedad específica, pero no tanto para obtener todos los demás.

También puedes probar (BaseClass) objeto. Esto lo lanzará al objeto base que contiene la propiedad (propiedades?) Que está buscando. De nuevo, es ideal para buscar un subconjunto específico de propiedades, pero oculta completamente todas las demás.

Buena suerte y buena caza.

+1

Gracias, ninguna de esas ideas me puede ayudar a ver objetos en el interior del árbol :( –

+0

Si está hablando de un miembro privado de una clase DEEP, * debería * poder usar el elenco. Como yo no conozca su código, puede estar en lo correcto en cuanto a que debe perforar. Si ese es el caso, tal vez esté en el arroyo como dicen. – Craig

+4

Poder ver de dónde proviene el miembro es ciertamente una característica importante, pero forzarlo a navegar por la cadena de herencia en lugar de solo mostrar una estructura plana con la clase fuente para cada miembro es un error. > :( – bambams

Cuestiones relacionadas