在C#中,我有一个对象说Shape
其中有两个字段area
和length
。使用Windbg倾倒数组
我得到了一个shapeList
这是一个形状的集合。
我的崩溃转储中有一个shapeList
地址。
我需要一个windbg脚本,遍历shapeList数组中的每个项目,并为每个形状单独显示area
的值。
在C#中,我有一个对象说Shape
其中有两个字段area
和length
。使用Windbg倾倒数组
我得到了一个shapeList
这是一个形状的集合。
我的崩溃转储中有一个shapeList
地址。
我需要一个windbg脚本,遍历shapeList数组中的每个项目,并为每个形状单独显示area
的值。
.for (r $t1 = 0; @$t1 < [length] * [element size]; r $t1 = @$t1 + [element size];) {!do poi(poi(@$t1+poi([address of list]+0x8)+0x18)+[offset of child object in parent object) }
For example:
class Foo
{
public Bar MyBar { get; set; }
}
class Bar
{
public String MyString { get; set; }
}
0:000> .for (r $t1 = 0; @$t1 < 0x5 * 0x8; r $t1 = @$t1 + 0x8;) {!do poi(poi(@$t1+poi(0000000002362e40+0x8)+0x18)+0x8) }
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 00000000023653b0 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 0000000002365468 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 0000000002365520 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 00000000023655d8 <MyString>k__BackingField
Name: testdebug.Bar
MethodTable: 000007fe95eb3928
EEClass: 000007fe95fc22d8
Size: 24(0x18) bytes
File: C:\users\testdebug.exe
Fields:
MT Field Offset Type VT Attr Value Name
000007fef47b4130 4000002 8 System.String 0 instance 0000000002365690 <MyString>k__BackingField
元素大小和长度有什么区别?我如何找到父对象中子对象的偏移量? – Rockstart 2012-04-26 06:21:56
元素大小是列表中元素的大小,因此如果它是引用类型(如类),则为8个字节(如果是32位,则为4)。长度是数组的大小(即列表对象上的_size)。 – 2012-04-26 11:39:19
你看过包含在安装中的windbg文档吗?在.chm文件中有一些非常好的脚本说明。 – Chris 2012-04-25 18:01:20