我有一个名为Foo的类型,它有一个名为length的字段.我想在Windbg中编写一个循环语句,它将在托管堆中转储类型为Foo的所有对象实例的长度字段?
乔治,提前谢谢
这是一个我尚未测试过的脚本,但可能对您有用。我基于 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;
Run Code Online (Sandbox Code Playgroud)
这一问题的技巧是计算 length 属性相对于主 Foo 引用的偏移字节数,并用正确的偏移字节数替换 printf 行中的“0xc”。
您应该能够通过在其中一个 Foo 上执行 !dumpobject 并查看它的结构来完成此操作。
希望有帮助。