Limite!sortie dumpheap (windbg) vers n objets

lorsque vous utilisez windbg et running !dumpheap commande pour voir les adresses des objets, comment pouvez-vous limiter à un nombre donné d'objets. Le seul moyen que j'ai trouvé était d'utiliser CTRL + BREAK et une ligne de commande sur un blog http://dotnetdebug.net/2005/07/04/dumpheap-parameters-and-some-general-information-on-sos-help-system/

- l x-imprime seulement X articles de chaque tas au lieu de tous les objets.

apparemment-l n'existe plus dans SOS.dll

15
demandé sur Timur Fanshteyn 2009-01-31 10:31:52

2 réponses

Selon quels critères vous souhaitez limiter le nombre de sorties? L'option-l limite simplement la sortie en fonction des numéros de ligne. C'est inutile: disons qu'il affiche uniquement les 10 premiers objets, peut-être l'objet que vous cherchez n'est pas encore répertorié.

si la sortie est trop longue pour la fenêtre de sortie WinDbgs, utilisez.logopen pour vider les objets dans un fichier, puis de consulter le fichier avec un éditeur de texte.

si vous avez d'autres idées à quoi ressemble votre objet, vous pouvez effectuer une boucle sur tous les objets

.foreach ( obj { !dumpheap -short -type MyType} )

et ensuite décider avec .if si l'objet correspond à ce critère.

par exemple, je cherchais une aiguille dans une botte de foin. J'ai cherché un Hashtable spécifique dans un programme avec plus de 3000 Hashtables sur le tas. La commande j'ai essayé d'utiliser

.foreach ( obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }

1C est le décalage du membre de comptage du hashtable.

100 est le nombre d'articles Table de hachage devrait avoir au moins.

malheureusement cela n'a pas fonctionné pour Hashtables immédiatement, parce que !dumpheap -type a aussi listé les Hashtablenumerators qui ont d'une façon ou d'une autre Bloqué le débogueur.

Pour le vidage des tables de hachage, exécutez !dumpheap -stat et trouver la table de méthode des hashtables et exécuter la commande avec -mt <methodtable> au lieu de -type <classname>, ce qui donne

.foreach ( obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
6
répondu Thomas Weller 2015-01-27 19:21:01

Que cherchez-vous réellement? Avant de regarder des objets individuels, il est habituel de réduire la zone d'intérêt.

l'interrupteur-stat affiche un résumé, par type d'objet sur le tas.

DumpHeap [-stat] [min ][-max ] [-thinlock] [mt ] [type ][démarrer [fin]]

  • l'option-stat restreint la sortie au sommaire de type Statistique.
  • l'option-min ignore les objets de taille inférieure paramètre, spécifiée en octets.
  • l'option-max ignore les objets qui sont plus grands que le paramètre Taille, spécifié dans bytes.
  • l'option thinlock signale les Thinlock. Pour plus d'informations, consultez la commande SyncBlk.
  • l'option-mt ne Liste que les objets qui correspondent à la structure MethodTable spécifiée.
  • l'option-type ne Liste que les objets dont le nom de type est une correspondance de la chaîne spécifiée.

le paramètre start commence à afficher l'adresse spécifiée. Le paramètre fin cesse de s'afficher à l'adresse spécifiée.

Ref.

5
répondu Mitch Wheat 2009-01-31 08:15:21