Aracılığıyla paylaş


Hata Ayıklayıcı Veri Modeli C++ Ek Arabirimleri

Bu konuda, meta veriler, kavramlar ve nesne numaralandırması gibi Hata Ayıklayıcı C++ Veri Modeli ile ilişkili bazı ek arabirimler açıklanmaktadır.

Hata Ayıklayıcı Veri Modeli Meta Veri Arabirimlerini

Veri modelindeki temel fikirlerden biri, bir nesnenin (özellikle yapay bir nesne) anahtar/değer/meta veri tanımlama demetleri sözlüğü olmasıdır. Her anahtar, anahtarı ve olası değerini çevreleyen çeşitli şeyleri açıklayan, kendisiyle ilişkilendirilmiş bir meta veri deposunun tamamına sahip olabilir. Meta verilerin hiçbir şekilde anahtarın değerini değiştirmediğini unutmayın. Yalnızca anahtar ve değeriyle ilişkili yardımcı bilgilerdir ve bu bilgiler, anahtarın sunusunu veya diğer ilişkili özniteliklerini ve değerini etkileyebilir.

Bazı durumlarda meta veri deposu, veri modelindeki bir nesnenin özü olan anahtar/değer/meta veri tanımlama listelerinden farklı değildir. Ancak bu görünümden basitleştirilmiştir. Meta veri deposu, IKeyStore arabirimi tarafından temsil edilir. Anahtar/değer/meta veri tanımlama demetlerinden oluşan bir koleksiyon olsa da, meta veri anahtar deposuyla ve model nesnesiyle yapılabileceklerle ilgili sınırlamalar vardır:

  • Anahtar deposu yalnızca tek bir üst depoya sahip olabilir; üst modellerden oluşan rastgele bir zincire sahip olamaz.
  • Anahtar deposu kavramına sahip değildir. Yalnızca anahtar/değer/meta veri tanımlama demetleri sözlüğüne sahip olabilir. Bu, bir anahtar deposunda bulunan anahtarların statik olduğu anlamına gelir. Dinamik bir dil sistemi tarafından isteğe bağlı olarak oluşturulamaz.
  • Yalnızca kural gereği, meta veri tanımlı anahtar deposundaki değerler temel değerlerle (iç değerler ve özellik erişimcileri) sınırlıdır

Anahtar deposu, anahtarların rastgele bir numarasına (ve rastgele adlandırmaya) sahip olsa da, tanımlı anlamsal değerlere sahip belirli adlar vardır. Şu anda bu adlar şunlardır:

Anahtar Adı Değer Türü Açıklama
PreferredRadix Tamsayı: 2, 8, 10 veya 16 Bir sıra değerinin hangi radix'te görüntülenmesi gerektiğini gösterir
PreferredFormat Tamsayı: PreferredFormat sabit listesi tarafından tanımlandığı gibi Değerin görüntülenmesi için tercih edilen biçimlendirme türünü gösterir
PreferredLength Tamsayı Diziler ve diğer kapsayıcılar için, varsayılan olarak kaç öğe görüntülenmesi gerektiğini gösterir
BulDerivation Boole mantığı Hata ayıklama ana bilgisayarının kullanmadan önce değer üzerinde türetilmiş tür analizi yapıp yapmaması gerektiğini gösterir (örneğin: görüntüleme)
Yardım Dize Araç ipucu stili, kullanıcı arabirimi tarafından uygun şekilde yararlı bir şekilde sunulabilen anahtar için yardım metni.
ActionName Dize Verilen yöntemin (bağımsız değişken almayan ve değer döndürmeyen) bir eylem olduğunu gösterir. Eylemin adı meta verilerde belirtilir. Kullanıcı arabirimi bu adı kullanarak seçeneği bir bağlam menüsünde veya başka bir uygun arabirimde sunabilir
ActionIsDefault Boole mantığı Yalnızca ActionName anahtarı belirtilmişse geçerlidir, bunun nesne için varsayılan eylem olduğunu gösterir.
ActionDescription Dize Yalnızca ActionName anahtarı belirtilirse geçerlidir, bu eylem için bir araç ipucu stili açıklaması verir. Bu tür metinler, kullanıcı arabirimi tarafından uygun şekilde yararlı bir şekilde sunulabilir.

Meta veri deposundaki anahtarların kendi meta verileri (ad infiniteum) olabilir ancak şu anda bu tür bir kullanım yoktur. Çoğu çağıran, IKeyStore arabirimindeki yöntemlerdeki tüm meta veri parametreleri için null değerini belirtir.

Çekirdek Meta Veri Arabirimini : IKeyStore

IKeyStore arabirimi aşağıdaki gibi tanımlanır:

DECLARE_INTERFACE_(IKeyStore, IUnknown)
{
   STDMETHOD(GetKey)(_In_ PCWSTR key, _COM_Errorptr_opt_ IModelObject** object, _COM_Outptr_opt_result_maybenull_ IKeyStore** metadata) PURE;
   STDMETHOD(SetKey)(_In_ PCWSTR key, _In_opt_ IModelObject* object, _In_opt_ IKeyStore* metadata) PURE;
   STDMETHOD(GetKeyValue)(_In_ PCWSTR key, _COM_Errorptr_opt_ IModelObject** object, _COM_Outptr_opt_result_maybenull_ IKeyStore** metadata) PURE;
   STDMETHOD(SetKeyValue)(_In_ PCWSTR key, _In_ IModelObject* object) PURE;
   STDMETHOD(ClearKeys)() PURE;
}

GetKey

GetKey yöntemi, IModelObject üzerindeki GetKey yöntemine benzer. Anahtar deposunda veya anahtar deposunun üst deposunda varsa belirtilen anahtarın değerini döndürür. Anahtarın değeri bir özellik erişimcisiyse, özellik erişimcisinde GetValue yönteminin çağrılmadığını unutmayın. Bir IModelObject içine kutulanmış gerçek IModelPropertyAccessor döndürülür. Bir istemcinin bu nedenle GetKeyValue'u çağırması normaldir.

SetKey

SetKey yöntemi, IModelObject üzerindeki SetKey yöntemine benzer. Anahtar oluşturabilen ve meta verileri anahtar deposunda ilişkilendirebilen tek yöntemdir.

GetKeyValue

GetKeyValue yöntemi, istemcinin meta veri deposundaki belirli bir anahtarın değerini bulmak için gideceği ilk yöntemdir. Anahtar bağımsız değişkeni tarafından belirtilen anahtar depoda (veya üst depoda) varsa, bu anahtarın değeri ve onunla ilişkili tüm meta veriler döndürülür. Anahtarın değeri bir özellik erişimcisiyse (IModelObject içine kutulanmış bir IModelPropertyAccessor), özellik erişimcisinin GetValue yöntemi otomatik olarak GetKeyValue tarafından çağrılır ve özelliğin temel değeri döndürülür.

SetKeyValue

SetKeyValue yöntemi, IModelObject üzerindeki SetKeyValue yöntemine benzer. Bu yöntem meta veri deposu içinde yeni bir anahtar oluşturamadı. Anahtar bağımsız değişkeni tarafından belirtilen mevcut bir anahtar varsa, değeri belirtildiği gibi ayarlanır. Anahtar bir özellik erişimcisiyse, temel alınan değeri ayarlamak için özellik erişimcisinde SetValue yöntemi çağrılır. Meta verilerin genellikle oluşturulduktan sonra statik olduğunu unutmayın. Meta veri anahtar deposunda bu yöntemin kullanımı seyrek olmalıdır.

ClearKeys

ClearKeys yöntemi, IModelObject üzerindeki ClearKeys yöntemine benzer. Verilen meta veri deposundaki her anahtarı kaldırır. Bu yöntemin herhangi bir üst depo üzerinde hiçbir etkisi yoktur.

Veri Modelinde Nesne Numaralandırmasını

Veri Modeli Nesneleri Numaralandırmayı

Veri modelinde iki temel anahtar numaralandırma arabirimi vardır: IKeyEnumerator ve IRawEnumerator. Bunlar iki temel arabirim olsa da, nesneleri üç stilden birinde listelemek için kullanılabilir:

Anahtarları - IKeyEnumerator arabirimi, temel alınan özellik erişimcilerini çözümlemeden bir nesnenin anahtarlarını ve değerlerini/meta verilerini listelemek için EnumerateKeys çağrısı yoluyla alınabiliyor. Bu numaralandırma stili, IModelObjects içine kutulanmış ham IModelPropertyAccessor değerleri döndürebilir.

Values - IKeyEnumerator ve IRawEnumerator arabirimleri, bir nesnedeki anahtarları/ham değerleri ve bunların değerlerini/meta verilerini numaralandırmak için EnumerateKeyValues veya EnumerateRawValues çağrıları aracılığıyla edinilebilir. Numaralandırmada bulunan tüm özellik erişimcileri, bu tür bir numaralandırma sırasında temel alınan GetValue yöntemine yapılan çağrı yoluyla otomatik olarak çözümlenir.

Başvuruları - IKeyEnumerator ve IRawEnumerator arabirimleri, bir nesnedeki anahtarlara/ham değerlere başvuruları numaralandırmak için EnumerateKeyReferences veya EnumerateRawReferences çağrıları aracılığıyla edinilebilir. Bu tür başvurular kaydedilebilir ve daha sonra temel alınan anahtarı veya ham değeri almak veya ayarlamak için kullanılabilir.

KeyEnumerator: Yapay anahtarların sabit listesi

IKeyEnumerator arabirimi, bir örnek nesnesi içindeki tüm anahtarların (anahtar, değer veya başvuruya göre) ve üst model zincirindeki tüm ilişkili üst modellerin sabit listesi için tek arabirimdir. Arabirim aşağıdaki gibi tanımlanır:

DECLARE_INTERFACE_(IKeyEnumerator, IUnknown)
{
    STDMETHOD(Reset)() PURE;
    STDMETHOD(GetNext)(_Out_ BSTR* key, _COM_Errorptr_opt_ IModelObject** value, _COM_Outptr_opt_result_maybenull_ IKeyStore** metadata) PURE;
}

Sıfırlama

Reset yöntemi, numaralandırıcıyı ilk alındığı konuma sıfırlar (örneğin: numaralandırmadaki ilk öğeden önce). Sonraki GetNext çağrısı ilk numaralandırılmış anahtarı döndürür.

getNext

GetNext yöntemi hem numaralandırıcıyı ileri taşır hem de sabit listesi içindeki bu konumdaki anahtarı döndürür.

IRawEnumerator: Yerel veya temel alınan dil (C/C++) yapılarının numaralandırması

IRawEnumerator arabirimi, hata ayıklama hedefinin adres alanı içindeki yerel bir yapıyı temsil eden bir nesne içindeki tüm yerel/dil yapılarının (değer veya başvuruya göre) numaralandırması için tek arabirimdir. Arabirim aşağıdaki gibi tanımlanır:

DECLARE_INTERFACE_(IRawEnumerator, IUnknown)
{
    STDMETHOD(Reset)() PURE;
    STDMETHOD(GetNext)(_Out_opt_ BSTR* name, _Out_opt_ SymbolKind *kind, _COM_Errorptr_opt_ IModelObject** value) PURE;
}

Sıfırlama

Reset yöntemi, numaralandırıcıyı ilk alındığı konuma sıfırlar (örneğin: numaralandırmadaki ilk öğeden önce). Sonraki GetNext çağrısı ilk numaralandırılmış yerel/dil yapısını döndürür.

getNext

GetNext yöntemi hem numaralandırıcıyı ileri taşır hem de numaralandırmada bu konumdaki yerel/dil yapısını döndürür.


Ayrıca bkz.

Bu konu, C++'tan erişilebilen arabirimleri, C++ tabanlı hata ayıklayıcı uzantısı oluşturmak için bunların nasıl kullanılacağını ve C++ veri modeli uzantısından diğer veri modeli yapılarının (örn. JavaScript veya NatVis) nasıl kullanılacağını açıklayan bir serinin parçasıdır.

Hata Ayıklayıcısı Veri Modeli C++ Genel Bakış

Hata Ayıklayıcı Veri Modeli C++ Arabirimleri

Hata Ayıklayıcı Veri Modeli C++ Nesneleri

Hata Ayıklayıcısı Veri Modeli C++ Kavramları

Hata Ayıklayıcısı Veri Modeli C++ Betik oluşturma