Bagikan melalui


IDebugExpressionEvaluator

Penting

Di Visual Studio 2015, cara menerapkan evaluator ekspresi ini tidak digunakan lagi. Untuk informasi tentang menerapkan evaluator ekspresi CLR, silakan lihat Evaluator Ekspresi CLR dan Sampel Evaluator Ekspresi Terkelola.

Antarmuka ini mewakili evaluator ekspresi.

Sintaks

IDebugExpressionEvaluator : IUnknown

Catatan untuk Pelaksana

Evaluator ekspresi harus mengimplementasikan antarmuka ini.

Catatan untuk Penelepon

Untuk mendapatkan antarmuka ini, buat instans evaluator ekspresi melalui CoCreateInstance metode dengan menggunakan ID kelas (CLSID) evaluator. Lihat Contoh.

Metode dalam Urutan Vtable

Tabel berikut memperlihatkan metode IDebugExpressionEvaluator.

Metode Deskripsi
Pilah Mengonversi string ekspresi menjadi ekspresi yang diurai.
GetMethodProperty Mendapatkan variabel lokal, argumen, dan properti metode lainnya.
GetMethodLocationProperty Mengonversi lokasi metode dan mengimbangi menjadi alamat memori.
SetLocale Menentukan bahasa mana yang akan digunakan untuk membuat hasil yang dapat dicetak.
SetRegistryRoot Mengatur akar registri. Digunakan untuk penelusuran kesalahan berdampingan.

Keterangan

Dalam situasi umum, mesin debug (DE) membuat instans evaluator ekspresi (EE) sebagai akibat dari panggilan ke ParseText. Karena DE mengetahui bahasa dan vendor EE yang ingin digunakannya, DE mendapatkan CLSID EE dari registri ( Pembantu SDK untuk fungsi Debugging , GetEEMetric, membantu pengambilan ini).

Setelah EE dibuat, DE memanggil Parse untuk mengurai ekspresi dan menyimpannya di objek IDebugParsedExpression . Kemudian, panggilan ke EvaluateSync mengevaluasi ekspresi.

Persyaratan

Header: ee.h

Namespace: Microsoft.VisualStudio.Debugger.Interop

Rakitan: Microsoft.VisualStudio.Debugger.Interop.dll

Contoh

Contoh ini menunjukkan cara membuat instans evaluator ekspresi yang diberikan penyedia simbol dan alamat dalam kode sumber. Contoh ini menggunakan fungsi, GetEEMetric, dari SDK Helpers untuk pustaka Debugging , dbgmetric.lib.

IDebugExpressionEvaluator GetExpressionEvaluator(IDebugSymbolProvider pSymbolProvider,
                                                 IDebugAddress *pSourceAddress)
{
    // This is typically defined globally but is specified here just
    // for this example.
    static const WCHAR strRegistrationRoot[] = L"Software\\Microsoft\\VisualStudio\\8.0Exp";

    IDebugExpressionEvaluator *pEE = NULL;
    if (pSymbolProvider != NULL && pSourceAddress != NULL) {
        HRESULT hr         = S_OK;
        GUID  languageGuid = { 0 };
        GUID  vendorGuid   = { 0 };

        hr = pSymbolProvider->GetLanguage(pSourceAddress,
                                          &languageGuid,
                                          &vendorGuid);
        if (SUCCEEDED(hr)) {
            CLSID clsidEE = { 0 };
            CComPtr<IDebugExpressionEvaluator> spExpressionEvaluator;
            // Get the expression evaluator's CLSID from the registry.
            ::GetEEMetric(languageGuid,
                          vendorGuid,
                          metricCLSID,
                          &clsidEE,
                          strRegistrationRoot);
            if (!IsEqualGUID(clsidEE,GUID_NULL)) {
                // Instantiate the expression evaluator.
                spExpressionEvaluator.CoCreateInstance(clsidEE);
            }
            if (spExpressionEvaluator != NULL) {
                pEE = spExpressionEvaluator.Detach();
            }
        }
    }
    return pEE;
}

Baca juga