Partilhar via


DEBUG_ADDRESS_UNION

Descreve os diferentes tipos de endereços.

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;
}

Termos

  • dwKind
    Um valor a partir do ADDRESS_KIND enumeração, especificando como interpretar a união.

  • addr.addrNative
    [Apenas C++] Contém o NATIVE_ADDRESS estrutura se dwKind = ADDRESS_KIND_NATIVE.

  • addr.addrThisRel
    [Apenas C++] Contém oUNMANAGED_ADDRESS_THIS_RELATIVE estrutura se dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

  • addr.addUPhysical
    [Apenas C++] Contém oUNMANAGED_ADDRESS_PHYSICAL estrutura se dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

  • addr.addrMethod
    [Apenas C++] Contém oMETADATA_ADDRESS_METHOD estrutura se dwKind = ADDRESS_KIND_METHOD.

  • addr.addrField
    [Apenas C++] Contém oMETADATA_ADDRESS_FIELD estrutura se dwKind = ADDRESS_KIND_FIELD.

  • addr.addrLocal
    [Apenas C++] Contém oMETADATA_ADDRESS_LOCAL estrutura se dwKind = ADDRESS_KIND_LOCAL.

  • addr.addrParam
    [Apenas C++] Contém oMETADATA_ADDRESS_PARAM estrutura se dwKind = ADDRESS_KIND_PARAM.

  • addr.addrArrayElem
    [Apenas C++] Contém oMETADATA_ADDRESS_ARRAYELEM estrutura se dwKind = ADDRESS_KIND_ARRAYELEM.

  • addr.addrRetVal
    [Apenas C++] Contém oMETADATA_ADDRESS_RETVAL estrutura se dwKind = ADDRESS_KIND_RETVAL.

  • addr.Unused
    Preenchimento de [apenas C++].

  • addr
    [Apenas C++] O nome da união.

  • unionmember
    [C# somente] Esse valor precisa ser empacotados para o tipo de estrutura apropriada com base em dwKind. Consulte os comentários para a associação entre dwKind e interpretação da união.

Comentários

Essa estrutura é parte do DEBUG_ADDRESS estruturar e representa um dos vários tipos diferentes de endereços (o DEBUG_ADDRESS estrutura é preenchida por uma chamada para o IDebugAddress::GetAddress método).

[C# somente] A tabela a seguir mostra como interpretar a unionmember membro para cada tipo de endereço. O exemplo mostra como isso é feito para um tipo de endereço.

dwKind

unionmemberinterpretado como

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

Exemplo

Este exemplo mostra como interpretar um tipo de endereço (METADATA_ADDRESS_ARRAYELEM) da DEBUG_ADDRESS_UNION estrutura no C#. Os elementos restantes podem ser interpretados exatamente da mesma maneira.

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));
            }
        }
    }
}

Requisitos

Cabeçalho: sh.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Consulte também

Referência

Estruturas e uniões

DEBUG_ADDRESS

ADDRESS_KIND

IDebugAddress::GetAddress