DEBUG_ADDRESS_UNION
Descreve os diferentes tipos de endereços.
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;
}
Termos
dwKind
Um valor a partir do ADDRESS_KIND enumeração, especificando como interpretar a união.addr.addrNative
[Apenas C++] Contém o NATIVE_ADDRESS estrutura se dwKind = ADDRESS_KIND_NATIVE.addr.addrThisRel
[Apenas C++] Contém oUNMANAGED_ADDRESS_THIS_RELATIVE estrutura se dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.addr.addUPhysical
[Apenas C++] Contém oUNMANAGED_ADDRESS_PHYSICAL estrutura se dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.addr.addrMethod
[Apenas C++] Contém oMETADATA_ADDRESS_METHOD estrutura se dwKind = ADDRESS_KIND_METHOD.addr.addrField
[Apenas C++] Contém oMETADATA_ADDRESS_FIELD estrutura se dwKind = ADDRESS_KIND_FIELD.addr.addrLocal
[Apenas C++] Contém oMETADATA_ADDRESS_LOCAL estrutura se dwKind = ADDRESS_KIND_LOCAL.addr.addrParam
[Apenas C++] Contém oMETADATA_ADDRESS_PARAM estrutura se dwKind = ADDRESS_KIND_PARAM.addr.addrArrayElem
[Apenas C++] Contém oMETADATA_ADDRESS_ARRAYELEM estrutura se dwKind = ADDRESS_KIND_ARRAYELEM.addr.addrRetVal
[Apenas C++] Contém oMETADATA_ADDRESS_RETVAL estrutura se dwKind = ADDRESS_KIND_RETVAL.addr.Unused
Preenchimento de [apenas C++].addr
[Apenas C++] O nome da união.unionmember
[C# somente] Esse valor precisa ser empacotados para o tipo de estrutura apropriada com base em dwKind. Consulte os comentários para a associação entre dwKind e interpretação da união.
Comentários
Essa estrutura é parte do DEBUG_ADDRESS estruturar e representa um dos vários tipos diferentes de endereços (o DEBUG_ADDRESS estrutura é preenchida por uma chamada para o IDebugAddress::GetAddress método).
[C# somente] A tabela a seguir mostra como interpretar a unionmember membro para cada tipo de endereço. O exemplo mostra como isso é feito para um tipo de endereço.
dwKind |
unionmemberinterpretado como |
---|---|
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 |
Exemplo
Este exemplo mostra como interpretar um tipo de endereço (METADATA_ADDRESS_ARRAYELEM) da DEBUG_ADDRESS_UNION estrutura no C#. Os elementos restantes podem ser interpretados exatamente da mesma maneira.
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));
}
}
}
}
Requisitos
Cabeçalho: sh.h
Namespace: Microsoft.VisualStudio.Debugger.Interop
Assembly: Microsoft.VisualStudio.Debugger.Interop.dll