我有以下几点
class Test
{
private MyStruct myStruct;
}
struct MyStruct
{
private int structValue;
}如何获得structValue的值?
我试了一下,但没有成功
field.GetFieldValue(_address, true\false)
field.GetFieldAddress(_address, true\false)
innerField.Type.GetValue(address)('field‘是Test变量,'innerField’是Test.myStruct。两者都是ClrInstanceField类型)。
发布于 2015-03-16 17:23:25
获得值的简单方法是使用ClrType.GetFieldValue。
var testType = heap.GetTypeByName("QuickLab.Test");
ulong testAddress = ...;
int value = (int)testType.GetFieldValue(testAddress, new [] { "myStruct", "structValue" });然而,ClrType.GetFieldValue在ClrMD的最新版本(0.8.27)中已经过时。下面是如何使用新版本来实现的,请注意,ClrField.GetFieldValue已被重命名为ClrField.GetValue。
var testType = heap.GetTypeByName("QuickLab.Test");
var myStructType = heap.GetTypeByName("QuickLab.MyStruct");
var myStructField = testType.GetFieldByName("myStruct");
var structValueField = myStructType.GetFieldByName("structValue");
ulong testAddress = ...;
// Get the address of MyStruct
ulong myStructAddress = myStructField.GetAddress(testAddress);
// Get the value in structValue field, interior = true because we are in a value type
int value = (int)structValueField.GetValue(myStructAddress, interior:true);您可能想看看ClrMD.Extensions,它是一个为使ClrMD更易于使用而设计的库。下面是如何使用ClrMD.Extensions来完成这一任务。
ClrMDSession session = ClrMDSession.LoadCrashDump(filePath);
ulong testAddress = ...;
var o = session.Heap.GetClrObject(testAddress);
int value = (int)o.Dynamic.myStruct.structValue;https://stackoverflow.com/questions/29008801
复制相似问题