2009-08-20 18 views
12

Sto cercando un modo per individuare tutte le istanze correnti sull'heap di tipi che implementano un'interfaccia specifica (durante il debug di WinDbg). Poiché le interfacce non sono tipi nel senso che è possibile creare istanze di un'interfaccia, esse ovviamente non vengono visualizzate durante l'ispezione dell'heap. Cioè !dumpheap è di scarso aiuto qui.Come trovare tutte le istanze di tipi che implementano un'interfaccia specifica durante il debug

Tuttavia, !dumpmt -md in un determinato MT elenca il numero di IFaces in IFaceMap. Per quanto posso dire questo numero sembra indicare se il tipo implementa una o più interfacce o meno. Quando si utilizzano i metodi flag -md nel tipo sono elencati anche.

Sfortunatamente il !dumpmd non lega un dato metodo a un'interfaccia per quanto posso dire, quindi questo non può essere utilizzato per stabilire le interfacce implementate.

Presumo che questa informazione sia disponibile da qualche parte nella memoria, ma non sono sicuro di dove cercare. Qualsiasi input è molto apprezzato.

+0

Perché il voto negativo? Per favore, spiegami, quindi ho la possibilità di migliorare la mia domanda. Grazie. –

risposta

-1

Se non è necessario creare il proprio programma, provare a NDepend.

+2

Non riesco a vedere come NDepend sarebbe utile qui. Ho tutto il codice sorgente disponibile, quindi posso trovare implementatori, se necessario.Sono interessato a trovare istanze in memoria in fase di esecuzione. –

0

Hai provato

! Dumpheap -tipo IFaces

Mostrerà le tabelle metodo troppo. Puoi scavare più a fondo da lì.

+3

No, elenca le istanze di tipi per cui IFaces fa parte del loro nome. Il parametro type usa una corrispondenza testuale regolare sui nomi dei tipi e quindi non ha nulla a che fare con le interfacce. –

0

La tua migliore scommessa sarebbe quella di iniziare con Crack.NET, che fa un po 'di quello che vuoi fare (anche se si rivolge alle app wpf e winforms). Il progetto è open source quindi dovresti essere in grado di ricavare il metodo utilizzato per ottenere le informazioni che desideri dall'origine. Ha un plugin che per Reflector consente di ispezionare anche i dettagli di un oggetto in memoria.

pagina del progetto: http://joshsmithonwpf.wordpress.com/cracknet/

CodePlex: http://cracknetproject.codeplex.com/

1

Alcuni anni fa, ero alla disperata ricerca di un po 'di informazioni di questo tipo. Ho finito per creare una vista ad albero che dovrebbe apparire solo quando hai usato un'opzione oscura per avviare l'app. Quando ho cliccato su "Aggiorna", usava la riflessione per viaggiare attraverso tutte le proprietà dell'istanza della classe radice. Se ha trovato una proprietà che era una raccolta o conteneva altre proprietà, le chiamava in modo ricorsivo. Il risultato finale è stato che una struttura dei dati di istanza a quel punto era disponibile per essere esaminata.

I punti principali di questo approccio sono

  1. Assicurarsi di avere una sola istanza di oggetto di livello superiore, oppure si sapere esattamente quanti e quali istanze di alto livello ci sono. (Inoltre, non dimenticare i valori statici.)
  2. Scopri come utilizzare il riflesso per esaminare le informazioni rilevanti.
  3. Visualizzarlo quando necessario e in modo leggibile.
+0

Bene, le informazioni sono disponibili nel codice sorgente. Vorrei solo scoprire come estrarre le informazioni durante il debug. Poiché il runtime deve avere queste informazioni da qualche parte, è "solo" una questione di scavare i dettagli. Ma grazie per il tuo contributo comunque. –

Problemi correlati