DEBUG_ADDRESS_UNION

描述不同类型的地址。

typedef struct _tagDEBUG_ADDRESS_UNION {
   ADDRESS_KIND dwKind;
   union {
      NATIVE_ADDRESS                  addrNative;
      UNMANAGED_ADDRESS_THIS_RELATIVE addrThisRel;
      UNMANAGED_ADDRESS_PHYSICAL      addrUPhysical;
      METADATA_ADDRESS_METHOD         addrMethod;
      METADATA_ADDRESS_FIELD          addrField;
      METADATA_ADDRESS_LOCAL          addrLocal;
      METADATA_ADDRESS_PARAM          addrParam;
      METADATA_ADDRESS_ARRAYELEM      addrArrayElem;
      METADATA_ADDRESS_RETVAL         addrRetVal;
      DWORD                           unused;
   } addr;
} 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++ [] 包含UNMANAGED_ADDRESS_THIS_RELATIVE 结构,如果 dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE。

  • addr.addUPhysical
    只有 C++ [] 包含UNMANAGED_ADDRESS_PHYSICAL 结构,如果 dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL。

  • addr.addrMethod
    只有 C++ [] 包含METADATA_ADDRESS_METHOD 结构,如果 dwKind = ADDRESS_KIND_METHOD。

  • addr.addrField
    只有 C++ [] 包含METADATA_ADDRESS_FIELD 结构,如果 dwKind = ADDRESS_KIND_FIELD。

  • addr.addrLocal
    只有 C++ [] 包含METADATA_ADDRESS_LOCAL 结构,如果 dwKind = ADDRESS_KIND_LOCAL。

  • addr.addrParam
    只有 C++ [] 包含METADATA_ADDRESS_PARAM 结构,如果 dwKind = ADDRESS_KIND_PARAM。

  • addr.addrArrayElem
    只有 C++ [] 包含METADATA_ADDRESS_ARRAYELEM 结构,如果 dwKind = ADDRESS_KIND_ARRAYELEM。

  • addr.addrRetVal
    只有 C++ [] 包含METADATA_ADDRESS_RETVAL 结构,如果 dwKind = ADDRESS_KIND_RETVAL。

  • addr.unused
    只有 C++ [] 空白。

  • 地址
    只有 C++ [] 联合的名称。

  • unionmember
    [仅限于 c#] 此值需要封送到基于 dwKind的相应 framework 类型。 有关该联合的 dwKind 和解释之间的关联参见备注。

备注

此结构是 DEBUG_ADDRESS framework 的一部分并表示许多不同的某个地址 ( DEBUG_ADDRESS framework 通过对 IDebugAddress:: 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

示例

此示例演示如何解释一地址 (METADATA_ADDRESS_ARRAYELEM) 在 C# 中 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

请参见

参考

结构和联合

DEBUG_ADDRESS

ADDRESS_KIND

IDebugAddress:: GetAddress