DEBUG_ADDRESS_UNION
Describes different kinds of addresses.
Syntax
Members
dwKind
A value from the ADDRESS_KIND enumeration, specifying how to interpret the union.
addr.addrNative
[C++ only] Contains the NATIVE_ADDRESS structure if dwKind
= ADDRESS_KIND_NATIVE.
addr.addrThisRel
[C++ only] Contains the UNMANAGED_ADDRESS_THIS_RELATIVE structure if dwKind
= ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.
addr.addUPhysical
[C++ only] Contains the UNMANAGED_ADDRESS_PHYSICAL structure if dwKind
= ADDRESS_KIND_UNMANAGED_PHYSICAL.
addr.addrMethod
[C++ only] Contains the METADATA_ADDRESS_METHOD structure if dwKind
= ADDRESS_KIND_METHOD.
addr.addrField
[C++ only] Contains the METADATA_ADDRESS_FIELD structure if dwKind
= ADDRESS_KIND_FIELD.
addr.addrLocal
[C++ only] Contains the METADATA_ADDRESS_LOCAL structure if dwKind
= ADDRESS_KIND_LOCAL.
addr.addrParam
[C++ only] Contains the METADATA_ADDRESS_PARAM structure if dwKind
= ADDRESS_KIND_PARAM.
addr.addrArrayElem
[C++ only] Contains the METADATA_ADDRESS_ARRAYELEM structure if dwKind
= ADDRESS_KIND_ARRAYELEM.
addr.addrRetVal
[C++ only] Contains the METADATA_ADDRESS_RETVAL structure if dwKind
= ADDRESS_KIND_RETVAL.
addr.unused
[C++ only] padding.
addr
[C++ only] The name of the union.
unionmember
[C# only] This value needs to be marshaled to the appropriate structure type based on dwKind
. See Remarks for the association between dwKind
and interpretation of the union.
Remarks
This structure is part of the DEBUG_ADDRESS structure and represents one of a number of different kinds of addresses (the DEBUG_ADDRESS
structure is filled in by a call to the GetAddress method).
[C# only] The following table shows how to interpret the unionmember
member for each kind of address. The Example shows how this is done for one kind of address.
dwKind |
unionmember interpreted as |
---|---|
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 |
Example
This example shows how to interpret one kind of address (METADATA_ADDRESS_ARRAYELEM
) of the DEBUG_ADDRESS_UNION
structure in C#. The remaining elements can be interpreted in exactly the same way.
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));
}
}
}
}
Requirements
Header: sh.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll