DEBUG_ADDRESS_UNION

描述不同类型的地址。

语法

public struct DEBUG_ADDRESS_UNION {
   public ADDRESS_KIND dwKind;
   public IntPtr       unionmember;
}

成员

dwKind
ADDRESS_KIND 枚举中的值,指定如何解释联合。

addr.addrNative
[仅限C++]如果 dwKind = ADDRESS_KIND_NATIVE,则包含 NATIVE_ADDRESS 结构。

addr.addrThisRel
[仅限C++]如果 dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE,则包含 UNMANAGED_ADDRESS_THIS_RELATIVE 结构。

addr.addUPhysical
[仅限C++]如果 dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL,则包含 UNMANAGED_ADDRESS_PHYSICAL 结构。

addr.addrMethod
[仅限C++]如果 dwKind = ADDRESS_KIND_METHOD,则包含 METADATA_ADDRESS_METHOD 结构。

addr.addrField
[仅限C++]如果 dwKind = ADDRESS_KIND_FIELD,则包含 METADATA_ADDRESS_FIELD 结构。

addr.addrLocal
[仅限C++]如果 dwKind = ADDRESS_KIND_LOCAL,则包含 METADATA_ADDRESS_LOCAL 结构。

addr.addrParam
[仅限C++]如果 dwKind = ADDRESS_KIND_PARAM,则包含 METADATA_ADDRESS_PARAM 结构。

addr.addrArrayElem
[仅限C++]如果 dwKind = ADDRESS_KIND_ARRAYELEM,则包含 METADATA_ADDRESS_ARRAYELEM 结构。

addr.addrRetVal
[仅限C++]如果 dwKind = ADDRESS_KIND_RETVAL,则包含 METADATA_ADDRESS_RETVAL 结构。

addr.unused
[仅C++] 填充。

addr
[仅限C++]联合的名称。

unionmember
[仅限 C#]此值需要根据 dwKind封送到适当的结构类型。 请参阅“说明”,了解 dwKind 与联盟的解释之间的关联。

言论

此结构是 DEBUG_ADDRESS 结构的一部分,表示多种不同类型的地址之一(DEBUG_ADDRESS 结构是通过调用 GetAddress 方法填充的)。

[仅限 C#]下表显示了如何解释每种地址的 unionmember 成员。 该示例演示了如何对一种地址执行此操作。

dwKind unionmember 解释为
ADDRESS_KIND_NATIVE NATIVE_ADDRESS
ADDRESS_KIND_UNMANAGED_THIS_RELATIVE UNMANAGED_ADDRESS_THIS_RELATIVE
ADDRESS_KIND_UNMANAGED_PHYSICAL UNMANAGED_ADDRESS_PHYSICAL
ADDRESS_KIND_METHOD METADATA_ADDRESS_METHOD
ADDRESS_KIND_FIELD METADATA_ADDRESS_FIELD
ADDRESS_KIND_LOCAL METADATA_ADDRESS_LOCAL
ADDRESS_KIND_PARAM METADATA_ADDRESS_PARAM
ADDRESS_KIND_ARRAYELEM METADATA_ADDRESS_ARRAYELEM
ADDRESS_KIND_RETVAL METADATA_ADDRESS_RETVAL

此示例演示如何解释 C# 中 DEBUG_ADDRESS_UNION 结构的一种地址(METADATA_ADDRESS_ARRAYELEM)。 其余元素可以完全相同的方式进行解释。

using System;
using System.Runtime.Interop.Services;
using Microsoft.VisualStudio.Debugger.Interop;

namespace MyPackage
{
    public class MyClass
    {
        public void Interpret(DEBUG_ADDRESS_UNION dau)
        {
            if (dau.dwKind == (uint)enum_ADDRESS_KIND.ADDRESS_KIND_METADATA_ARRAYELEM)
            {
                 METADATA_ADDRESS_ARRAYELEM arrayElem =
                     (METADATA_ADDRESS_ARRAYELEM)Marshal.PtrToStructure(dau.unionmember,
                                 typeof(METADATA_ADDRESS_ARRAYELEM));
            }
        }
    }
}

要求

标头:sh.h

命名空间:Microsoft.VisualStudio.Debugger.Interop

程序集:Microsoft.VisualStudio.Debugger.Interop.dll

另请参阅