Iterando através da saída! DumpHeap para ler o valor no deslocamento da memória

Estou tentando criar uma expressão de linha de comando WinDbg que aceite a saída do!DumpHeap comando e para cada endereço, lê um valor de 64 bits do deslocamento0x08 após o endereço. Eu acho que isso é possível (não tenho certeza), mas todas as tentativas que fiz até agora falham com algum erro.

Eu pesquisei bastante, mas a maioria dos artigos do WinDbg mostra exemplos simples que eu posso tentar, mas minhas tentativas falham.

Eu tenho um despejo de processo de um processo de trabalho do ASP.NET. O processo tem algum crescimento de memória, mas não há um ofensor claro, então estou tentando listar vários objetos que aparecem muitas vezes na memória. Estou usando o sos.dll para as extensões WinDbg de depuração gerenciada.

Aqui está o que estou tentando fazer

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

Observe que o comando acima deve estar em uma única linha - adicionei apenas uma quebra de linha para melhor legibilidade aqui.

Para a linha acima, o WinDbg imprime este erro:Couldn't resolve error at 'myaddress+0x8);!do @$t0;.echo ************* 00000001003cb870'.

Estou tentando percorrer todos os endereços retornados por!DumpHeap - cada endereço deve ir para omyaddress variável. Então, para cada endereço, estou tentando definir o$t0 registro do usuário para o valor lidomyaddress+0x8. o!do (!DumpObject) despejaria o objeto nesse endereço.

Se eu correr apenas (novamente, em uma linha no WinDbg):

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

Recebo uma lista de despejos de objetos, mas este é um nível superior ao que eu preciso. Quero detalhar um nível mais profundamente e despejar um membro específico desses objetos de nível superior pelos quais estou interagindo.

Isso é possível ou estou no caminho errado com isso?

questionAnswers(2)

yourAnswerToTheQuestion