Share via


DEBUG_ADDRESS_UNION

Describe diferentes tipos de direcciones.

Sintaxis

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

Miembros

dwKind
Valor de la enumeración ADDRESS_KIND , especificando cómo interpretar la unión.

addr.addrNative
[Solo C++] Contiene la estructura NATIVE_ADDRESS si dwKind = ADDRESS_KIND_NATIVE.

addr.addrThisRel
[Solo C++] Contiene laestructura UNMANAGED_ADDRESS_THIS_RELATIVE si dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

addr.addUPhysical
[Solo C++] Contiene laestructura UNMANAGED_ADDRESS_PHYSICAL si dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

addr.addrMethod
[Solo C++] Contiene laestructura METADATA_ADDRESS_METHOD si dwKind = ADDRESS_KIND_METHOD.

addr.addrField
[Solo C++] Contiene laestructura METADATA_ADDRESS_FIELD si dwKind = ADDRESS_KIND_FIELD.

addr.addrLocal
[Solo C++] Contiene laestructura METADATA_ADDRESS_LOCAL si dwKind = ADDRESS_KIND_LOCAL.

addr.addrParam
[Solo C++] Contiene laestructura METADATA_ADDRESS_PARAM si dwKind = ADDRESS_KIND_PARAM.

addr.addrArrayElem
[Solo C++] Contiene laestructura METADATA_ADDRESS_ARRAYELEM si dwKind = ADDRESS_KIND_ARRAYELEM.

addr.addrRetVal
[Solo C++] Contiene laestructura METADATA_ADDRESS_RETVAL si dwKind = ADDRESS_KIND_RETVAL.

addr.unused
[Solo C++] relleno.

addr
[Solo C++] Nombre de la unión.

unionmember
[Solo C#] Este valor debe serializarse en el tipo de estructura adecuado basado en dwKind. Vea comentarios sobre la asociación entre dwKind la unión y la interpretación de la unión.

Comentarios

Esta estructura forma parte de la estructura DEBUG_ADDRESS y representa uno de varios tipos diferentes de direcciones (la DEBUG_ADDRESS estructura se rellena mediante una llamada al método GetAddress ).

[Solo C#] En la tabla siguiente se muestra cómo interpretar el unionmember miembro para cada tipo de dirección. En el ejemplo se muestra cómo se hace esto para un tipo de dirección.

dwKind unionmember interpretado 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

Ejemplo

En este ejemplo se muestra cómo interpretar un tipo de dirección (METADATA_ADDRESS_ARRAYELEM) de la DEBUG_ADDRESS_UNION estructura en C#. Los elementos restantes se pueden interpretar exactamente de la misma manera.

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

Encabezado: sh.h

Espacio de nombres: Microsoft.VisualStudio.Debugger.Interop

Ensamblado: Microsoft.VisualStudio.Debugger.Interop.dll

Consulte también