5

我有一个名为 Foo 的类型,它有一个名为 length 的字段。我想在 Windbg 中编写一个循环语句,它将转储托管堆中所有类型为 Foo 的对象实例的长度字段?

提前谢谢,乔治

4

1 回答 1

3

这是一个我没有测试过的脚本,但可能对你有用。我基于 Tess 的脚本为 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;

解决这个问题的技巧是计算长度属性从主 Foo 引用偏移的字节数,并用正确的偏移字节数替换 printf 行中的“0xc”。

你应该能够通过在你的一个 Foo 上做一个 !dumpobject 并查看它的结构来做到这一点。

希望有帮助。

于 2009-04-11T04:21:24.783 回答