다음을 통해 공유


DEBUG_ADDRESS_UNION

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

통사론

  • C#
  • C++
public struct DEBUG_ADDRESS_UNION {
   public ADDRESS_KIND dwKind;
   public IntPtr       unionmember;
}

회원

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

addr.addrNative
[C++만] dwKind = ADDRESS_KIND_NATIVE 경우 NATIVE_ADDRESS 구조를 포함합니다.

addr.addrThisRel
[C++만] dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE 경우 UNMANAGED_ADDRESS_THIS_RELATIVE 구조를 포함합니다.

addr.addUPhysical
[C++만] dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL 경우 UNMANAGED_ADDRESS_PHYSICAL 구조를 포함합니다.

addr.addrMethod
[C++만] dwKind = ADDRESS_KIND_METHOD 경우 METADATA_ADDRESS_METHOD 구조를 포함합니다.

addr.addrField
[C++만] dwKind = ADDRESS_KIND_FIELD 경우 METADATA_ADDRESS_FIELD 구조를 포함합니다.

addr.addrLocal
[C++만] dwKind = ADDRESS_KIND_LOCAL 경우 METADATA_ADDRESS_LOCAL 구조를 포함합니다.

addr.addrParam
[C++만] dwKind = ADDRESS_KIND_PARAM 경우 METADATA_ADDRESS_PARAM 구조를 포함합니다.

addr.addrArrayElem
[C++만] dwKind = ADDRESS_KIND_ARRAYELEM 경우 METADATA_ADDRESS_ARRAYELEM 구조를 포함합니다.

addr.addrRetVal
[C++만] dwKind = ADDRESS_KIND_RETVAL 경우 METADATA_ADDRESS_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

본보기

이 예제에서는 C#에서 DEBUG_ADDRESS_UNION 구조체의 한 종류의 주소(METADATA_ADDRESS_ARRAYELEM)를 해석하는 방법을 보여 줍니다. 나머지 요소는 정확히 동일한 방식으로 해석할 수 있습니다.

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

참고 항목