2016-09-06 10 views
1

J'ai essayé de vider la poignée épinglé par !dumpvc mais je ne sais pas le MethodTable pour la poignée épinglé. Comment l'obtenir?Comment obtenir la table de méthodes pour la poignée épinglée?

0:000> !gcroot 0000000384b8a160 
HandleTable: 
    00000002008e1bf8 (pinned handle) 
    -> 000000067fff3978 System.Object[] 
    -> 00000003802f6800 System.Collections.Generic.List`1[[System.String, mscorlib]] 
    -> 000000023e781020 System.Object[] 
    -> 0000000384b8a160 System.String 

Répondre

0

Videz le contenu de la poignée avec dq 2008e1bf8 L1. Prenez l'adresse qui s'y trouve et videz-la avec !do. Cela vous donnera le MT et le nom du type.

Sinon, passez à l'adresse !sosex.gch, comme ceci: !gch 2008e1bf8

+0

, cela ne donne la MT de la poignée épinglé lui-même, il donne la MT de l'objet, il épinglé point de poignée. – Jason

+0

J'ai le gcroot suivant, et beaucoup de chaînes ne peuvent pas être collectées par GC, et nous avons finalement trouvé la chaîne List épinglé, mais nous ne savons pas comment trouver la poignée de la broche. BTW, nous avons utilisé le System.Runtime.Caching.MemoryCache pour stocker la chaîne en tant que clé. =============================================== " 0: 000> gcroot 000000038245b130 HandleTable: 00000002008e1bf8 (poignée épinglé) -> 000000067fff3978 System.Object [] -> 00000003802f6800 System.Collections.Generic.List'1 [[System.String, mscorlib]] ! -> 000000023e781020 System.Object [] -> 000000038245b130 System.String " – Jason

+0

La poignée épinglé est simplement une entrée de table de poignée, donc il n'y a pas de MT. Par curiosité, pour quoi utiliseriez-vous le MT, s'il existait? –