Bagikan melalui


DEBUG_ADDRESS_UNION

Menjelaskan berbagai jenis alamat.

Sintaksis

public struct DEBUG_ADDRESS_UNION {
   public ADDRESS_KIND dwKind;
   public IntPtr       unionmember;
}

Anggota

dwKind
Nilai dari enumerasi ADDRESS_KIND, menentukan cara menginterpretasikan penyatuan.

addr.addrNative
[Hanya C++] Berisi struktur NATIVE_ADDRESS jika dwKind = ADDRESS_KIND_NATIVE.

addr.addrThisRel
[Hanya C++] Berisi struktur UNMANAGED_ADDRESS_THIS_RELATIVE jika dwKind = ADDRESS_KIND_UNMANAGED_THIS_RELATIVE.

addr.addUPhysical
[Hanya C++] Berisi struktur UNMANAGED_ADDRESS_PHYSICAL jika dwKind = ADDRESS_KIND_UNMANAGED_PHYSICAL.

addr.addrMethod
[Hanya C++] Berisi struktur METADATA_ADDRESS_METHOD jika dwKind = ADDRESS_KIND_METHOD.

addr.addrField
[Hanya C++] Berisi struktur METADATA_ADDRESS_FIELD jika dwKind = ADDRESS_KIND_FIELD.

addr.addrLocal
[Hanya C++] Berisi struktur METADATA_ADDRESS_LOCAL jika dwKind = ADDRESS_KIND_LOCAL.

addr.addrParam
[Hanya C++] Berisi struktur METADATA_ADDRESS_PARAM jika dwKind = ADDRESS_KIND_PARAM.

addr.addrArrayElem
[Hanya C++] Berisi struktur METADATA_ADDRESS_ARRAYELEM jika dwKind = ADDRESS_KIND_ARRAYELEM.

addr.addrRetVal
[Hanya C++] Berisi struktur METADATA_ADDRESS_RETVAL jika dwKind = ADDRESS_KIND_RETVAL.

addr.unused
[Hanya C++] padding.

addr
[Hanya C++] Nama serikat.

unionmember
[C# saja] Nilai ini perlu dinaikkan ke jenis struktur yang sesuai berdasarkan dwKind. Lihat Keterangan untuk hubungan antara dwKind dan interpretasi serikat.

Komentar

Struktur ini adalah bagian dari struktur DEBUG_ADDRESS dan mewakili salah satu dari sejumlah jenis alamat yang berbeda (struktur DEBUG_ADDRESS diisi oleh panggilan ke metode GetAddress).

[C# saja] Tabel berikut ini memperlihatkan cara menginterpretasikan anggota unionmember untuk setiap jenis alamat. Contoh menunjukkan bagaimana hal ini dilakukan untuk satu jenis alamat.

dwKind unionmember ditafsirkan sebagai
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

Contoh

Contoh ini menunjukkan cara menginterpretasikan satu jenis alamat (METADATA_ADDRESS_ARRAYELEM) dari struktur DEBUG_ADDRESS_UNION di C#. Elemen yang tersisa dapat ditafsirkan dengan cara yang sama persis.

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));
            }
        }
    }
}

Persyaratan

Header: sh.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Rakitan: Microsoft.VisualStudio.Debugger.Interop.dll

Lihat juga