DEBUG_ADDRESS_UNION

描述不同类型的地址。

语法

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

成员

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

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

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

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

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

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

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

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

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

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

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# 中结构的一种地址(METADATA_ADDRESS_ARRAYELEM)。DEBUG_ADDRESS_UNION 其余元素可以完全相同的方式进行解释。

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

另请参阅