DEBUG_ADDRESS_UNION
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
說明不同類型的地址。
語法
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
結構填入呼叫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