Как написать цикл в Windbg, как это? - PullRequest
5 голосов
/ 28 февраля 2009

У меня есть тип с именем Foo, и у него есть поле с именем length. Я хочу написать один оператор цикла в Windbg, который будет выгружать поле длины всех экземпляров объекта типа Foo в управляемой куче?

спасибо заранее, George

1 Ответ

3 голосов
/ 11 апреля 2009

Вот скрипт, который я не тестировал, но может помочь вам. Я основал его на сценариях Тесс для сброса всех переменных сеанса в куче для ASP.net.

r @$t0=0;

$$ Loop to get all foo's
.foreach (CurrentFoo {!dumpheap -type George.George2.Foo -short}){
    $$ Increment # of Foo's
    r @$t0 = @$t0+1

    .printf "Length:\t%d\n", poi(${CurrentFoo}+0xc);
}
.printf "Number of Foo's: %d\n\n\n\n\n\n\n\n\n", @$t0;

Хитрость в этом заключается в том, чтобы выяснить количество байтов, на которое свойство length смещено от основной ссылки Foo, и заменить "0xc" в строке printf на правильное количество байтов смещения.

Вы должны быть в состоянии сделать это, просто сделав! Dumpobject на одном из ваших Foo и просмотрев его структуру.

Надеюсь, это поможет.

...