DEBUG_ADDRESS_UNION
다양한 종류의 주소를 설명합니다.
통사론
회원
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
참고 항목
- 구조체 및 공용 구조체
- DEBUG_ADDRESS
- ADDRESS_KIND
- GetAddress