描述不同类型的地址。
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的相应 framework 类型。 有关该联合的 dwKind 和解释之间的关联参见备注。
备注
此结构是 DEBUG_ADDRESS framework 的一部分并表示许多不同的某个地址 ( DEBUG_ADDRESS framework 通过对 IDebugAddress:: GetAddress 方法的调用填充)。
[仅限于 c#] 下表显示如何解释每 unionmember 成员的地址。 示例显示了如何为一个地址执行。
dwKind |
解释了unionmember |
---|---|
ADDRESS_KIND_NATIVE |
|
ADDRESS_KIND_UNMANAGED_THIS_RELATIVE |
|
ADDRESS_KIND_UNMANAGED_PHYSICAL |
|
ADDRESS_KIND_METHOD |
|
ADDRESS_KIND_FIELD |
|
ADDRESS_KIND_LOCAL |
|
ADDRESS_KIND_PARAM |
|
ADDRESS_KIND_ARRAYELEM |
|
ADDRESS_KIND_RETVAL |
示例
此示例演示如何解释一地址 (METADATA_ADDRESS_ARRAYELEM) 在 C# 中 DEBUG_ADDRESS_UNION 结构。 其余元素可能类似地介绍。
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