Bagikan melalui


IDiaStackFrame

Mengekspos properti bingkai tumpukan.

Sintaks

IDiaStackFrame : IUnknown

Metode dalam Urutan Vtable

Berikut ini adalah metode yang didukung oleh antarmuka ini:

Metode Deskripsi
IDiaStackFrame::get_allocatesBasePointer Mengambil bendera yang menunjukkan bahwa penunjuk dasar dialokasikan untuk kode dalam rentang alamat ini. Metode ini tidak digunakan lagi.
IDiaStackFrame::get_base Mengambil basis alamat bingkai.
IDiaStackFrame::get_cplusplusExceptionHandling Mengambil bendera yang menunjukkan bahwa penanganan pengecualian C++ berlaku.
IDiaStackFrame::get_functionStart Mengambil bendera yang menunjukkan bahwa blok berisi titik masuk fungsi.
IDiaStackFrame::get_lengthLocals Mengambil jumlah byte variabel lokal yang didorong pada tumpukan.
IDiaStackFrame::get_lengthParams Mengambil jumlah byte parameter yang didorong pada tumpukan.
IDiaStackFrame::get_lengthProlog Mengambil jumlah byte kode prolog dalam blok
IDiaStackFrame::get_lengthSavedRegisters Mengambil jumlah byte register tersimpan yang didorong pada tumpukan.
IDiaStackFrame::get_localsBase Mengambil basis alamat lokal.
IDiaStackFrame::get_maxStack Mengambil jumlah maksimum byte yang didorong pada tumpukan dalam bingkai.
IDiaStackFrame::get_rawLVarInstanceValue Mengambil nilai variabel lokal yang ditentukan sebagai byte mentah.
IDiaStackFrame::get_registerValue Mengambil nilai register yang ditentukan.
IDiaStackFrame::get_returnAddress Mengambil alamat pengembalian bingkai.
IDiaStackFrame::get_size Mengambil ukuran bingkai dalam byte.
IDiaStackFrame::get_systemExceptionHandling Mengambil bendera yang menunjukkan bahwa penanganan pengecualian sistem berlaku.
IDiaStackFrame::get_type Mengambil jenis bingkai.

Keterangan

Bingkai tumpukan adalah abstraksi panggilan fungsi selama eksekusinya.

Catatan untuk Penelepon

Dapatkan antarmuka ini dengan memanggil metode IDiaEnumStackFrames::Next. Lihat antarmuka IDiaEnumStackFrames untuk contoh tentang mendapatkan antarmuka IDiaStackFrame.

Contoh

Contoh ini menampilkan berbagai atribut bingkai tumpukan.

void PrintStackFrame(IDiaStackFrame* pFrame)
{
    if (pFrame != NULL)
    {
        ULONGLONG bottom = 0;
        ULONGLONG top    = 0;

        if (pFrame->get_base(&bottom) == S_OK &&
            pFrame->get_registerValue( CV_REG_ESP, &top ) == S_OK )
        {
            printf("range = 0x%08I64x - 0x%08I64x\n", bottom, top);
        }

        ULONGLONG returnAddress = 0;
        if (pFrame->get_returnAddress(&returnAddress) == S_OK)
        {
            printf("return address = 0x%08I64x\n", returnAddress);
        }

        DWORD lengthFrame     = 0;
        DWORD lengthLocals    = 0;
        DWORD lengthParams    = 0;
        DWORD lengthProlog    = 0;
        DWORD lengthSavedRegs = 0;
        if (pFrame->get_size(&lengthFrame) == S_OK &&
            pFrame->get_lengthLocals(&lengthLocals) == S_OK &&
            pFrame->get_lengthParams(&lengthParams) == S_OK &&
            pFrame->get_lengthProlog(&lengthProlog) == S_OK &&
            pFrame->get_lengthSavedRegisters(&lengthSavedRegs) == S_OK)
        {
            printf("stack frame size          = 0x%08lx bytes\n", lengthFrame);
            printf("length of locals          = 0x%08lx bytes\n", lengthLocals);
            printf("length of parameters      = 0x%08lx bytes\n", lengthParams);
            printf("length of prolog          = 0x%08lx bytes\n", lengthProlog);
            printf("length of saved registers = 0x%08lx bytes\n", lengthSavedRegs);
        }
    }
}

Persyaratan

Header: Dia2.h

Library: diaguids.lib

DLL: msdia80.dll

Baca juga