首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ClrMD获取原语值

用ClrMD获取原语值
EN

Stack Overflow用户
提问于 2015-03-12 11:40:20
回答 1查看 301关注 0票数 0

我有以下几点

代码语言:javascript
复制
class Test
{
    private MyStruct myStruct;
}

struct MyStruct
{
    private int structValue;
}

如何获得structValue的值?

我试了一下,但没有成功

代码语言:javascript
复制
field.GetFieldValue(_address, true\false)
field.GetFieldAddress(_address, true\false)
innerField.Type.GetValue(address)

('field‘是Test变量,'innerField’是Test.myStruct。两者都是ClrInstanceField类型)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-16 17:23:25

获得值的简单方法是使用ClrType.GetFieldValue

代码语言:javascript
复制
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

代码语言:javascript
复制
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来完成这一任务。

代码语言:javascript
复制
ClrMDSession session = ClrMDSession.LoadCrashDump(filePath);
ulong testAddress = ...;
var o = session.Heap.GetClrObject(testAddress);
int value = (int)o.Dynamic.myStruct.structValue;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29008801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档