2010-02-17 11 views
22

C'è un modo per fare in modo che la finestra di Watch mostri tutte le proprietà e i campi ereditati in una lunga lista piatta, piuttosto che nascosta dietro un nodo "base" annidato?Appiattisci i membri ereditati nella finestra di visualizzazione di Visual Studio?

Sto eseguendo il debug di alcuni codici C# che fanno un uso massiccio dell'ereditarietà - alcune delle proprietà che voglio guardare sono dietro tre livelli di "base" nella finestra di controllo. Questo sarebbe più o meno sopportabile se volessi esaminare un singolo oggetto di questo tipo, ma in realtà sto osservando un albero di loro ...

risposta

8

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

UPDATE: ho scritto uno strumento commerciale chiamato OzCode che risolve questo problema. L'idea è che se sei interessato a una proprietà della classe base, puoi "Star" quella proprietà, che fa apparire la proprietà nella parte superiore dell'elenco dei membri e anche nel testo del suo genitore.

Così, per esempio, nel seguente scenario, ho avuto per espandere due nodi di base per arrivare a vedere le proprietà che volevo, "Importante" e "interessante": No Stars

Ma una volta che Stella queste proprietà, essi appariranno sempre al top, anche durante la visualizzazione variabili del tipo derivato, così vedrò:

After adding stars

Questi stars sono persistenti e sarà mostrato ogni volta che si visualizza un oggetto di quel tipo in il DataTip o QuickWatch wi Da quel momento in poi, la prossima volta che una variabile di quel tipo, non avrai bisogno di espandere quei nodi "base". E poiché i valori speciali vengono visualizzati come testo del nodo genitore, se stai osservando una struttura ad albero di questi oggetti fortemente nidificati (come hai affermato tu), sarai in grado di vedere queste proprietà senza nemmeno espandere i nodi.

INFORMATIVA COMPLETA: Sono il coautore dello strumento che ho descritto qui.

+0

a) Esiste ancora? (il tuo sito è inattivo) b) Funziona su tutte le classi (classi del framework nativo .Net)? – tbone

+0

@tbone a) Sì, il prodotto è stato rinominato con il nome [OzCode] (http://www.oz-code.com), aggiornato la mia risposta b) Sì, lo fa! –

+0

Hai prezzi A/B testati? Mi piacerebbe avere questo, ma sborsare $ 70 è un blocco psicologico piuttosto grande, anche se economicamente illogico. – tbone

4

Non come tale. Vedete, è una caratteristica! La capacità di vedere da dove proviene una proprietà è importante per la maggior parte del tempo.

Capisco il tuo dolore però. Ci sono dei problemi di lavoro. Innanzitutto, è sufficiente inserire la object.property nella finestra di controllo. Questo mostrerà solo la proprietà che stai cercando. È ottimo per scavare in una proprietà specifica ma non così tanto per ottenere tutti gli altri.

Puoi anche provare l'oggetto (BaseClass). Questo lo getterà sull'oggetto base che contiene la proprietà (proprietà?) Che stai cercando. Ancora una volta è fantastico per guardare un sottoinsieme specifico di proprietà ma nasconde completamente tutti gli altri.

Buona fortuna e buona caccia.

+1

Grazie, purtroppo nessuna di queste idee può aiutarmi a visualizzare gli oggetti in profondità nell'albero :( –

+0

Se si parla di un membro privato di una classe DEEP, si dovrebbe * essere in grado di utilizzare il cast. conoscete il vostro codice, potreste essere corretti nel senso che dovete eseguire il drill, in tal caso, potreste essere sul torrente come si suol dire. – Craig

+4

Essere in grado di vedere da dove proviene il membro è sicuramente una caratteristica importante, ma costringervi a navigare nella catena di ereditarietà invece di visualizzare solo una struttura piatta con la classe di origine per ogni membro è un bug. > :( – bambams

Problemi correlati