Condividi tramite


DEBUG_ADDRESS_UNION

Vengono descritti i diversi tipi degli indirizzi.

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

termini

  • dwKind
    Un valore ADDRESS_KIND dell'enumerazione, specificando come interpretare l'unione.

  • addr.addrNative
    [C++ solo] contiene NATIVE_ADDRESS la struttura se dwKind = ADDRESS_KIND_NATIVE.

  • addr.addrThisRel
    [C++ solo] contieneUNMANAGED_ADDRESS_THIS_RELATIVE la struttura se dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

  • addr.addUPhysical
    [C++ solo] contieneUNMANAGED_ADDRESS_PHYSICAL la struttura se dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

  • addr.addrMethod
    [C++ solo] contieneMETADATA_ADDRESS_METHOD la struttura se dwKind = ADDRESS_KIND_METHOD.

  • addr.addrField
    [C++ solo] contieneMETADATA_ADDRESS_FIELD la struttura se dwKind = ADDRESS_KIND_FIELD.

  • addr.addrLocal
    [C++ solo] contieneMETADATA_ADDRESS_LOCAL la struttura se dwKind = ADDRESS_KIND_LOCAL.

  • addr.addrParam
    [C++ solo] contieneMETADATA_ADDRESS_PARAM la struttura se dwKind = ADDRESS_KIND_PARAM.

  • addr.addrArrayElem
    [C++ solo] contieneMETADATA_ADDRESS_ARRAYELEM la struttura se dwKind = ADDRESS_KIND_ARRAYELEM.

  • addr.addrRetVal
    [C++ solo] contieneMETADATA_ADDRESS_RETVAL la struttura se dwKind = ADDRESS_KIND_RETVAL.

  • addr.unused
    [C++ solo] spaziatura interna.

  • addr
    [C++ solo] nome dell'unione.

  • unionmember
    [Solo c#] questo valore deve essere effettuato il marshalling del tipo appropriato della struttura basato su dwKind. Vedere le note per l'associazione tra dwKind e l'interpretazione dell'unione.

Note

Questa struttura fanno parte DEBUG_ADDRESS della struttura e rappresenta uno tra diversi tipi diversi degli indirizzi (la struttura di DEBUG_ADDRESS viene soddisfatta da una chiamata IDebugAddress:: GetAddress al metodo).

[Solo c#] illustrato nella tabella come interpretare il membro di unionmember per ogni tipo di indirizzo. Nell'esempio viene illustrato come eseguire questa operazione per un tipo di indirizzo.

dwKind

unionmember interpretata come

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

Esempio

In questo esempio viene illustrato come interpretare un tipo di indirizzo (METADATA_ADDRESS_ARRAYELEM) della struttura di DEBUG_ADDRESS_UNION in c#. Gli elementi restanti possono essere interpretati esattamente allo stesso modo.

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

Requisiti

intestazione: sh.h

Spazio dei nomi: Microsoft.VisualStudio.Debugger.Interop

Assembly: Microsoft.VisualStudio.Debugger.Interop.dll

Vedere anche

Riferimenti

Strutture e unioni

DEBUG_ADDRESS

ADDRESS_KIND

IDebugAddress:: GetAddress