Поделиться через


DEBUG_ADDRESS_UNION

Описывает различные виды адресов.

Синтаксис

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

Участники

dwKind
Значение из перечисления ADDRESS_KIND , указывающее, как интерпретировать объединение.

addr.addrNative
[Только C++] Содержит структуру NATIVE_ADDRESS if dwKind = ADDRESS_KIND_NATIVE.

addr.addrThisRel
[Только C++] Содержит структуру UNMANAGED_ADDRESS_THIS_RELATIVE if dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

addr.addUPhysical
[Только C++] Содержит структуру UNMANAGED_ADDRESS_PHYSICAL if dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

addr.addrMethod
[Только C++] Содержит структуру METADATA_ADDRESS_METHOD if dwKind = ADDRESS_KIND_METHOD.

addr.addrField
[Только C++] Содержит структуру METADATA_ADDRESS_FIELD if dwKind = ADDRESS_KIND_FIELD.

addr.addrLocal
[Только C++] Содержит структуру METADATA_ADDRESS_LOCAL if dwKind = ADDRESS_KIND_LOCAL.

addr.addrParam
[Только C++] Содержит структуру METADATA_ADDRESS_PARAM if dwKind = ADDRESS_KIND_PARAM.

addr.addrArrayElem
[Только C++] Содержит структуру METADATA_ADDRESS_ARRAYELEM if dwKind = ADDRESS_KIND_ARRAYELEM.

addr.addrRetVal
[Только C++] Содержит структуру METADATA_ADDRESS_RETVAL if dwKind = ADDRESS_KIND_RETVAL.

addr.unused
[Только C++] заполнение.

addr
[Только C++] Имя объединения.

unionmember
[только C#] Это значение необходимо маршалировать в соответствующий тип структуры на dwKindоснове. См. замечания по ассоциации между dwKind и интерпретацией объединения.

Замечания

Эта структура является частью структуры DEBUG_ADDRESS и представляет один из нескольких различных типов адресов ( DEBUG_ADDRESS структура заполняется вызовом метода GetAddress ).

[только C#] В следующей таблице показано, как интерпретировать unionmember член для каждого типа адреса. В примере показано, как это делается для одного типа адреса.

dwKind unionmember интерпретируется как
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

Пример

В этом примере показано, как интерпретировать один тип адреса (METADATA_ADDRESS_ARRAYELEM) DEBUG_ADDRESS_UNION структуры в C#. Остальные элементы можно интерпретировать точно так же.

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

Требования

Заголовок: sh.h

Пространство имен: Microsoft.VisualStudio.Debugger.Interop

Сборка: Microsoft.VisualStudio.Debugger.Interop.dll

См. также