2009-08-20 25 views
12

Szukam sposobu zlokalizowania wszystkich bieżących wystąpień na stercie typów implementujących dany interfejs (podczas debugowania WinDbg). Ponieważ interfejsy nie są typami w tym sensie, że można tworzyć wystąpienia interfejsu, oczywiście nie pojawiają się podczas inspekcji sterty. To znaczy. !dumpheap ma niewielką pomoc.Jak znaleźć wszystkie wystąpienia typów implementujących dany interfejs podczas debugowania

Jednak w przypadku danego MT podano IFaces w IFaceMap. O ile mogę powiedzieć, ten numer wydaje się wskazywać, czy typ implementuje jeden lub więcej interfejsów, czy też nie. Podczas korzystania z metody flagi na typie są również wymienione.

Niestety, !dumpmd nie wiąże danej metody z interfejsem, o ile wiem, więc nie można tego użyć do ustalenia zaimplementowanych interfejsów.

Zakładam, że ta informacja jest dostępna gdzieś w pamięci, ale nie jestem pewna, gdzie szukać. Wszelkie dane wejściowe są wysoko cenione.

+0

Dlaczego głosowanie w dół? Proszę wyjaśnij, więc mam szansę poprawić moje pytanie. Dzięki. –

Odpowiedz

-1

Jeśli nie musisz tworzyć własnego programu, spróbuj NDepend.

+2

Nie widzę, w jaki sposób NDepend byłby przydatny. Mam cały dostępny kod źródłowy, więc w razie potrzeby mogę znaleźć programistów.Interesuje mnie wyszukiwanie instancji w pamięci w czasie wykonywania. –

0

Czy próbowałeś

! Dumpheap dyspozycji następujące typy IFaces

To pokaże stoliki metoda zbyt. Możesz głębiej dokopać się.

+3

Nie, lista instancji typów, dla których IFaces jest częścią ich nazwy. Parametr type używa zwykłego dopasowania tekstowego do nazw typów i dlatego nie ma nic wspólnego z interfejsami. –

0

Najlepiej byłoby zacząć od Crack.NET, który robi to, co chcesz zrobić (mimo że jest skierowany do aplikacji wpf i winforms). Projekt jest open source, więc powinieneś być w stanie wyprowadzić metodę użytą do uzyskania potrzebnych informacji ze źródła. Posiada wtyczkę do Reflectora, która pozwala również na sprawdzenie szczegółów obiektu w pamięci.

strona projektu: http://joshsmithonwpf.wordpress.com/cracknet/

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

1

Kilka lat temu, byłem zdesperowany do pewnych informacji, takich jak ten. W końcu utworzyłem widok drzewa, który pojawił się tylko wtedy, gdy używałeś niejasnej opcji do uruchamiania aplikacji. Kiedy kliknąłem "odśwież", używałbym odbicia, aby przejść przez wszystkie właściwości instancji klasy głównej. Jeśli znajdzie obiekt będący kolekcją lub posiadający inne właściwości, wywołałby je rekurencyjnie. Rezultat końcowy był taki, że drzewo danych instancji w tym momencie było dostępne do przejrzenia.

Główne punkty tego podejścia są

  1. Upewnij się, że tylko jeden najwyższego poziomu instancji obiektu lub wiesz dokładnie, ile i jakie instancje najwyższego poziomu istnieją. (Nie zapomnij również o wartościach statycznych.)
  2. Dowiedz się, jak używać odbicia, aby przejrzeć odpowiednie informacje.
  3. Wyświetl go, gdy jest potrzebny i czytelny.
+0

Cóż, informacje są dostępne w kodzie źródłowym. Chciałbym tylko dowiedzieć się, jak wykopać informacje podczas debugowania. Ponieważ środowisko wykonawcze musi mieć te informacje gdzieś, jest "po prostu" kwestią wykopywania szczegółów. Ale dzięki za twoje wejście i tak. –

Powiązane problemy