2009-02-28 23 views
5

我有一個名爲Foo的類型,它有一個稱爲長度的字段。我想在Windbg中編寫一個循環語句,它將在託管堆中轉儲Foo類型的所有對象實例的長度字段?如何在這樣的Windbg中編寫一個循環?

由於事先 喬治

+0

一個很好的答案在這裏:http://stackoverflow.com/questions/3926562/inspect-field-on-all-instances-in-memory-dump – Bryan 2010-10-13 18:54:15

回答

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屬性從主富基準偏移的字節數,並在更換‘位於0xC’具有正確數量的偏移字節的printf行。

你應該能夠做到這一點,只需在你的Foo上做一個!dumpobject並查看它的結構。

希望有所幫助。