如何在Windbg中编写这样的循环?

时间:2009-02-28 11:58:28

标签: loops windbg

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

提前谢谢, 乔治

1 个答案:

答案 0 :(得分:3)

这是一个我没有测试过的脚本,但可能会帮你解决问题。我基于dumping out all session variables on the heap for 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引用偏移的字节数,并用正确的偏移字节数替换printf行中的“0xc”。

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

希望有所帮助。