Compartir vía


DEBUG_ADDRESS_UNION

Describe diferentes tipos de direcciones.

Sintaxis

  • de C#
  • de C++
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 la estructura UNMANAGED_ADDRESS_THIS_RELATIVE si dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

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

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

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

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

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

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

addr.addrRetVal
[Solo C++] Contiene la estructura 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 e interpretación de la unión.

Observaciones

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

[Solo C#] En la tabla siguiente se muestra cómo interpretar el miembro unionmember 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 estructura DEBUG_ADDRESS_UNION 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