다음을 통해 공유


DEBUG_ADDRESS_UNION

다양 한 종류의 주소에 설명 합니다.

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

용어

  • dwKind
    값을는 ADDRESS_KIND 열거형, 공용 구조체를 해석 하는 방법을 지정 합니다.

  • addr.addrNative
    [C + +에만] 포함 되어 있는 NATIVE_ADDRESS 경우 구성 dwKind ADDRESS_KIND_NATIVE =.

  • addr.addrThisRel
    [C + +에만] 포함 되어 있는UNMANAGED_ADDRESS_THIS_RELATIVE 경우 구성 dwKind ADDRESS_KIND_UNMANAGED_THIS_RELATIVE =.

  • addr.addUPhysical
    [C + +에만] 포함 되어 있는UNMANAGED_ADDRESS_PHYSICAL 경우 구성 dwKind ADDRESS_KIND_UNMANAGED_PHYSICAL =.

  • addr.addrMethod
    [C + +에만] 포함 되어 있는METADATA_ADDRESS_METHOD 경우 구성 dwKind ADDRESS_KIND_METHOD =.

  • addr.addrField
    [C + +에만] 포함 되어 있는METADATA_ADDRESS_FIELD 경우 구성 dwKind ADDRESS_KIND_FIELD =.

  • addr.addrLocal
    [C + +에만] 포함 되어 있는METADATA_ADDRESS_LOCAL 경우 구성 dwKind ADDRESS_KIND_LOCAL =.

  • addr.addrParam
    [C + +에만] 포함 되어 있는METADATA_ADDRESS_PARAM 경우 구성 dwKind ADDRESS_KIND_PARAM =.

  • addr.addrArrayElem
    [C + +에만] 포함 되어 있는METADATA_ADDRESS_ARRAYELEM 경우 구성 dwKind ADDRESS_KIND_ARRAYELEM =.

  • addr.addrRetVal
    [C + +에만] 포함 되어 있는METADATA_ADDRESS_RETVAL 경우 구성 dwKind ADDRESS_KIND_RETVAL =.

  • addr.unused
    [C + +에만] 안쪽 여백입니다.

  • 대상 주소
    [C + +에만] 공용 구조체의 이름입니다.

  • unionmember
    [C#만] 이 값을 기준으로 적절 한 구조 유형을 마샬링할 수 해야 dwKind. 사이의 연결에 대 한 설명 부분을 참조 하십시오. dwKind 및 통합 해석 합니다.

설명

이 구조에 속하지는 DEBUG_ADDRESS 구조와 여러 가지 종류의 주소 중 하나를 나타냅니다 (는 DEBUG_ADDRESS 구조는 기입을 호출 하 여 IDebugAddress::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

참고 항목

참조

구조체 및 공용 구조체

DEBUG_ADDRESS

ADDRESS_KIND

IDebugAddress::GetAddress