DEBUG_ADDRESS_UNION

Descrive diversi tipi di indirizzi.

Sintassi

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

Membri

dwKind
Valore dell'enumerazione ADDRESS_KIND , che specifica come interpretare l'unione.

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

addr.addrThisRel
[solo C++] Contiene lastruttura UNMANAGED_ADDRESS_THIS_RELATIVE se dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

addr.addUPhysical
[solo C++] Contiene lastruttura UNMANAGED_ADDRESS_PHYSICAL se dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

addr.addrMethod
[solo C++] Contiene lastruttura METADATA_ADDRESS_METHOD se dwKind = ADDRESS_KIND_METHOD.

addr.addrField
[solo C++] Contiene lastruttura METADATA_ADDRESS_FIELD se dwKind = ADDRESS_KIND_FIELD.

addr.addrLocal
[solo C++] Contiene lastruttura METADATA_ADDRESS_LOCAL se dwKind = ADDRESS_KIND_LOCAL.

addr.addrParam
[solo C++] Contiene lastruttura METADATA_ADDRESS_PARAM se dwKind = ADDRESS_KIND_PARAM.

addr.addrArrayElem
[solo C++] Contiene lastruttura METADATA_ADDRESS_ARRAYELEM se dwKind = ADDRESS_KIND_ARRAYELEM.

addr.addrRetVal
[solo C++] Contiene lastruttura METADATA_ADDRESS_RETVAL se dwKind = ADDRESS_KIND_RETVAL.

addr.unused
Riempimento [solo C++].

addr
[solo C++] Nome dell'unione.

unionmember
[Solo C#] Questo valore deve essere sottoposto a marshalling al tipo di struttura appropriato in dwKindbase a . Vedere osservazioni per l'associazione tra dwKind e interpretazione dell'unione.

Osservazioni:

Questa struttura fa parte della struttura DEBUG_ADDRESS e rappresenta uno dei diversi tipi di indirizzi (la DEBUG_ADDRESS struttura viene compilata da una chiamata al metodo GetAddress ).

[Solo C#] Nella tabella seguente viene illustrato come interpretare il unionmember membro per ogni tipo di indirizzo. L'esempio mostra come viene eseguita questa operazione per un tipo di indirizzo.

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

Questo esempio illustra come interpretare un tipo di indirizzo (METADATA_ADDRESS_ARRAYELEM) della DEBUG_ADDRESS_UNION struttura in C#. Gli elementi rimanenti possono essere interpretati esattamente nello 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

Vedi anche