Partager via


DEBUG_ADDRESS_UNION

décrit différents genres d'adresses.

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

termes

  • dwKind
    Une valeur de l'énumération d' ADDRESS_KIND , en spécifiant comment interpréter l'union.

  • addr.addrNative
    [C++] uniquement contient la structure de NATIVE_ADDRESS si dwKind = ADDRESS_KIND_NATIVE.

  • addr.addrThisRel
    [C++] uniquement contient la structure deUNMANAGED_ADDRESS_THIS_RELATIVE si dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

  • addr.addUPhysical
    [C++] uniquement contient la structure deUNMANAGED_ADDRESS_PHYSICAL si dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

  • addr.addrMethod
    [C++] uniquement contient la structure deMETADATA_ADDRESS_METHOD si dwKind = ADDRESS_KIND_METHOD.

  • addr.addrField
    [C++] uniquement contient la structure deMETADATA_ADDRESS_FIELD si dwKind = ADDRESS_KIND_FIELD.

  • addr.addrLocal
    [C++] uniquement contient la structure deMETADATA_ADDRESS_LOCAL si dwKind = ADDRESS_KIND_LOCAL.

  • addr.addrParam
    [C++] uniquement contient la structure deMETADATA_ADDRESS_PARAM si dwKind = ADDRESS_KIND_PARAM.

  • addr.addrArrayElem
    [C++] uniquement contient la structure deMETADATA_ADDRESS_ARRAYELEM si dwKind = ADDRESS_KIND_ARRAYELEM.

  • addr.addrRetVal
    [C++] uniquement contient la structure deMETADATA_ADDRESS_RETVAL si dwKind = ADDRESS_KIND_RETVAL.

  • addr.unused
    [C++] uniquement effectuer.

  • addr
    [C++] uniquement le nom de l'union.

  • unionmember
    [C#] uniquement cette valeur doit être marshalé vers le type approprié de structure en fonction dwKind. Consultez la section notes de l'association entre dwKind et l'interprétation de l'union.

Notes

Cette structure fait partie de la structure de DEBUG_ADDRESS et représente un d'un certain nombre de types d'adresses (la structure d' DEBUG_ADDRESS est effectuée par un appel à la méthode d' IDebugAddress : : GetAddress ).

[C#] uniquement le tableau suivant montre comment interpréter le membre d' unionmember pour chaque type d'adresse. L'exemple montre comment cela est fait pour un type d'adresse.

dwKind

unionmember a interprète comme

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

Exemple

Cet exemple montre comment interpréter un type d'adresse (METADATA_ADDRESS_ARRAYELEM) de la structure d' DEBUG_ADDRESS_UNION en c#. Les éléments restants peuvent être interprètes de la même façon.

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

Configuration requise

en-tête : sh.h

l'espace de noms : Microsoft.VisualStudio.Debugger.Interop

Assembly : Microsoft.VisualStudio.Debugger.Interop.dll

Voir aussi

Référence

Structures et unions

DEBUG_ADDRESS

ADDRESS_KIND

IDebugAddress : : GetAddress