【问题标题】:The VT is 0,but !dumpobj <Address> doesn.t work.I am a newer in using Visual Studio 2010+sos.dll.Who can help me?VT 为 0,但 !dumpobj <Address> 不起作用。我是使用 Visual Studio 2010+sos.dll 的新手。谁能帮帮我?
【发布时间】:2012-04-19 03:47:44
【问题描述】:

!dumpvc 79b9a9ac a0a208 名称:System.IntPtr 方法表:79b9a9ac EE等级:798d57e0 大小:12(0xc)字节 文件:C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll 领域: MT 字段偏移类型 VT Attr 值名称 79b5a21c 40004a9 0 PTR 0 实例 748d5756 m_value 79b9a9ac 40004aa b4c System.IntPtr 1 共享静态零

域:值 0015db70:NotInit

!dumpobj 748d5756 无效对象

!dumpvc 79b5a21c 748d5756 名称:System.UIntPtr 方法表:79b5a21c EE等级:798d8a84 大小:12(0xc)字节 文件:C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll 领域: MT 字段偏移类型 VT Attr 值名称 79b5a21c 4000697 0 PTR 0 实例 m_value 79b5a21c 4000698 b78 System.UIntPtr 1 共享静态零

域:值 0015db70:NotInit

【问题讨论】:

    标签: sos .net


    【解决方案1】:

    !dumpobj 对 what 地址不起作用?假设您的意思是 !dumpobj 748d5756,问题是 !do 不适用于值类型。 GC 堆上的每个对象(引用类型)在对象内存的开头都有一个 MT(方法表)指针。因此,GC 堆上的每个对象都是自描述的。 !do 的工作方式是读取 MT 以确定类型,然后转储对象的字段。

    有了值类型,你就没有 MT。值类型仅包含字段。因此,您必须使用 !dumpvc 。

    【讨论】:

    • 非常感谢!你提醒我明白一个类的Value Type feild在GC堆上,而不是在堆栈上。所以我必须使用!dumpobj来查看Value Type feild一个班级。是这样吗?
    • 没错。值类型字段与对象内联存储,而引用类型字段仅存储与对象内联的指针,但对象所引用的实际引用类型驻留在 GC 堆的其他位置。
    • 太好了!我想是的!问题是我怎样才能找到实际引用类型所在的位置。我的电子邮件是 1143926160@qq.com。你能给我发个样品吗?非常感谢!
    • 字段的值是指向对象的指针。换句话说,它是一个地址。该地址是 ref 类型“驻留”的位置。要检查该引用类型,请将地址传递给 !sos.do 或 !sosex.mdt。
    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 2020-05-24
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多