Durch! DumpHeap-Ausgabe durchlaufen, um den Wert am Speicheroffset zu lesen

Ich versuche, einen WinDbg-Befehlszeilenausdruck zu finden, der die Ausgabe des @ übernimm!DumpHeap -Befehl und liest für jede Adresse einen 64-Bit-Wert aus dem Offset0x08 nach der Adresse. Ich denke, das ist möglich (nicht sicher), aber jeder Versuch, den ich bisher unternommen habe, schlägt mit einem Fehler fehl.

ch habe viel gesucht, aber die meisten WinDbg-Artikel zeigen einfache Beispiele, die ich ausprobieren kann, aber meine Versuche scheiter

Ich habe einen Prozess-Dump eines ASP.NET-Arbeitsprozesses. Der Prozess hat ein gewisses Speicherwachstum, aber es gibt keinen eindeutigen Übeltäter. Daher versuche ich, eine Reihe von Objekten aufzulisten, die häufig im Speicher vorkommen. Ich verwende sos.dll für das verwaltete Debuggen von WinDbg-Erweiterungen.

Hier ist was ich versuche zu tun

.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{r @$t0=poi(myaddress+0x8);!do @$t0;.echo ************* myaddress}

Hinweis, dass der obige Befehl in einer einzelnen Zeile stehen muss - ich habe hier nur einen Zeilenumbruch hinzugefügt, um die Lesbarkeit zu verbessern.

Für die obige Zeile gibt WinDbg diesen Fehler aus:Couldn't resolve error at 'myaddress+0x8);!do @$t0;.echo ************* 00000001003cb870'.

Ich versuche, alle von @ zurückgegebenen Adressen zu durchlaufe!DumpHeap - jede Adresse sollte in das @ gehmyaddress Variable. Dann versuche ich für jede Adresse das @ zu setz$t0 user registriere dich auf den gelesenen Wert vonmyaddress+0x8. Das!do (!DumpObject) Befehl würde dann das Objekt an dieser Adresse ausgeben.

Wenn ich nur laufe wieder in einer Zeile in WinDbg):

.foreach(myaddress {!dumpheap -short -mt 000007fe998adea8})
{!do myaddress;.echo ************* myaddress}

Ich erhalte eine Liste der Objekt-Dumps, aber dies ist eine Ebene höher als ich brauche. Ich möchte eine Ebene tiefer gehen und ein bestimmtes Mitglied dieser Objekte der obersten Ebene sichern, durch die ich iteriere.

Ist das möglich oder bin ich damit auf dem falschen Weg?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage