Selon quels critères souhaitez-vous 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 ne montre que les 10 premiers objets, peut-être que l'objet que vous cherchez n'est même pas listé.
Si la sortie est trop longue pour la fenêtre de sortie WinDbgs, utilisez .logopen pour vider les objets dans un fichier, puis passez en revue le fichier avec un éditeur de texte.
Si vous avez d'autres idées comment votre objet ressemble, vous pouvez effectuer une boucle sur tous les objets
.foreach (obj { !dumpheap -short -type MyType})
puis déterminer avec .if
si votre objet correspond à ce critère. Par exemple, je cherchais une aiguille dans une botte de foin. Je cherchais une Hashtable spécifique dans un programme avec plus de 3000 Hashtables sur le tas. La commande que j'ai essayé d'utiliser était
.foreach (obj { !dumpheap -short -type Hashtable }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
1C
est le décalage de l'organe de comptage du Hashtable.
100
est le nombre d'éléments Hashtable devait avoir au moins.
Malheureusement, cela n'a pas fonctionné pour Hashtables immédiatement, parce que !dumpheap -type
a également énuméré HashtableEnumerators qui s'est écrasé en quelque sorte le débogueur.
Pour de vidage hashtables uniquement, exécutez !dumpheap -stat
et figure sur la table des méthodes de hashage et exécutez la commande avec -mt <methodtable>
au lieu de -type <classname>
, qui donne
.foreach (obj { !dumpheap -short -mt <MT of Hashtable> }) {.if (poi(poi(${obj}+1c)) > 100) {!do ${obj}} }
Je sais que c'est une vieille question, mais avez-vous réussi à trouver une réponse? –