Felsökningsprogram-datamodell C++ Ytterligare gränssnitt

Det här avsnittet beskriver några ytterligare gränssnitt som är associerade med felsökningsprogrammetS C++-datamodell, till exempel metadata, begrepp och objektuppräkning.

Data Model Metadata Interfaces för felsökning

En av huvudbegreppen i datamodellen är att ett objekt (särskilt ett syntetiskt) är en ordlista med nyckel-/värde-/metadatatupplar. Varje nyckel kan ha ett helt arkiv med metadata associerade med den som beskriver en mängd olika saker som omger nyckeln och dess potentiella värde. Observera att metadata inte på något sätt ändrar nyckelns värde. Det är bara kompletterande information som är associerad med nyckeln och dess värde som kan påverka presentationen eller andra associerade attribut för nyckeln och dess värde.

I vissa avseenden skiljer sig inte ett metadatalager så mycket från de nyckel-/värde-/metadatatupplar som är kärnan i ett objekt i datamodellen. Det är dock förenklat från den här vyn. Ett metadatalager representeras av IKeyStore-gränssnittet. Det finns även en samling nyckel/värde/metadatatupplar, men det finns begränsningar för vad som kan göras med ett metadatanyckellager jämfört med ett modellobjekt:

  • Ett nyckelarkiv kan bara ha ett enda överordnat lager – det kan inte ha en godtycklig kedja med överordnade modeller.
  • Ett nyckelarkiv har inga begrepp. Den kan bara ha ordlistan med nyckel/värde/metadatatupplar. Det innebär att nycklarna som finns i ett nyckelarkiv är statiska. De kan inte skapas på begäran av ett dynamiskt språksystem.
  • Endast enligt konventionen begränsas värdena i ett metadatadefinierat nyckellager till grundläggande värden (inbyggda värden och egenskapsåtkomster)

Även om ett nyckelarkiv kan ha ett godtyckligt tal (och godtycklig namngivning) av nycklar, finns det vissa namn som har definierat semantiska värden. För närvarande är dessa namn:

Nyckelnamn Värdetyp Beskrivning
PreferredRadix Heltal: 2, 8, 10 eller 16 Anger vilket radix ett ordningstal ska visas i
PreferredFormat Heltal: enligt definitionen i PreferredFormat-uppräkningen Anger önskad formateringstyp för visning av värdet
PreferredLength Integer För matriser och andra containrar anger hur många element som ska visas som standard
FindDerivation Boolean Anger om felsökningsvärden ska utföra analys av härledd typ på värdet innan du använder (t.ex. visning)
Hjälp Sträng Hjälptext för knappbeskrivningsformat för nyckeln som kan presenteras av användargränssnittet på ett lämpligt användbart sätt.
ActionName Sträng Anger att den angivna metoden (en som inte tar några argument och inte returnerar några värden) är en åtgärd. Namnet på åtgärden anges i metadata. Ett användargränssnitt kan använda det här namnet för att presentera alternativet i en snabbmeny eller ett annat lämpligt gränssnitt
ActionIsDefault Boolean Endast giltigt om ActionName-nyckeln har angetts anger att det här är standardåtgärden för objektet.
ActionDescription Sträng Endast giltigt om ActionName-nyckeln har angetts, ger detta en beskrivning av verktygstipsformatet för åtgärden. Sådan text kan presenteras av användargränssnittet på ett lämpligt användbart sätt.

Observera att även om nycklar i metadatalagret kan ha egna metadata (ad infiniteum), finns det för närvarande ingen användning för sådana. De flesta anropare anger null för metadataparametrar i metoderna i IKeyStore-gränssnittet.

Huvudmetadatagränssnittet: IKeyStore

IKeyStore-gränssnittet definieras på följande sätt:

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-metoden motsvarar GetKey-metoden på IModelObject. Det returnerar värdet för den angivna nyckeln om den finns i nyckelarkivet eller nyckelarkivets överordnade arkiv. Observera att om värdet för nyckeln är en egenskapsåtkomst, anropas inte Metoden GetValue i egenskapsåtkomsten. Den faktiska IModelPropertyAccessor som boxas till en IModelObject returneras. Det är typiskt att en klient anropar GetKeyValue av den anledningen.

SetKey

SetKey-metoden motsvarar SetKey-metoden på IModelObject. Det är den enda metoden som kan skapa en nyckel och associera metadata med den i nyckelarkivet.

GetKeyValue

Metoden GetKeyValue är den första metoden som en klient går till för att hitta värdet för en viss nyckel i metadatalagret. Om nyckeln som anges av nyckelargumentet finns i arkivet (eller det överordnade arkivet) returneras värdet för den nyckeln och eventuella metadata som är associerade med den. Om värdet för nyckeln är en egenskapsåtkomstor (en IModelPropertyAccessor inrutad i en IModelObject) anropas GetValue-metoden för egenskapsåtkomstorn automatiskt av GetKeyValue och det underliggande värdet för egenskapen returneras.

SetKeyValue

Metoden SetKeyValue motsvarar metoden SetKeyValue i IModelObject. Den här metoden kan inte skapa en ny nyckel i metadatalagret. Om det finns en befintlig nyckel som anges av nyckelargumentet anges dess värde enligt beskrivningen. Om nyckeln är en egenskapsåtkomstor anropas Metoden SetValue på egenskapsåtkomstorn för att ange det underliggande värdet. Observera att metadata vanligtvis är statiska när de har skapats. Användningen av den här metoden i ett metadatanyckelarkiv bör vara ovanlig.

ClearKeys

Metoden ClearKeys är analog med ClearKeys-metoden på IModelObject. Varje nyckel tas bort från det angivna metadatalagret. Den här metoden påverkar inte något överordnat lager.

objektuppräkning i datamodellen

räkna upp objekt i datamodellen

Det finns två kärnnyckeluppräkningsgränssnitt i datamodellen: IKeyEnumerator och IRawEnumerator. Även om det här är de två kärngränssnitten kan de användas för att räkna upp objekt i något av tre format:

Keys – Gränssnittet IKeyEnumerator kan hämtas via ett anrop till EnumerateKeys för att räkna upp nycklarna för ett objekt och deras värden/metadata utan att matcha några underliggande egenskapsåtkomster. Det här uppräkningsformatet kan returnera råa IModelPropertyAccessor-värden i IModelObjects.

Values – Gränssnitten IKeyEnumerator och IRawEnumerator kan hämtas via anrop till antingen EnumerateKeyValues eller EnumerateRawValues för att räkna upp nycklar/råvärden för ett objekt och deras värden/metadata. Alla egenskapsåtkomster som finns i uppräkningen löses automatiskt via ett anrop till den underliggande GetValue-metoden under en sådan uppräkning.

Referenser – Gränssnitten IKeyEnumerator och IRawEnumerator kan hämtas via anrop till antingen EnumerateKeyReferences eller EnumerateRawReferences för att räkna upp referenser till nycklar/råvärden för ett objekt. Sådana referenser kan sparas och senare användas för att hämta eller ange den underliggande nyckeln eller råvärdet.

KeyEnumerator: Uppräkning av syntetiska nycklar

Gränssnittet IKeyEnumerator är det enda gränssnittet för uppräkning av alla nycklar (efter nyckel, värde eller referens) i ett instansobjekt och alla associerade överordnade modeller i den överordnade modellkedjan. Gränssnittet definieras på följande sätt:

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

Nollställa

Metoden Återställ återställer uppräknaren till den position den befann sig på när den först förvärvades (t.ex. före det första elementet i uppräkningen). Ett efterföljande anrop till GetNext returnerar den första uppräknade nyckeln.

GetNext

Metoden GetNext flyttar både uppräknaren framåt och returnerar nyckeln vid den positionen i uppräkningen.

IRawEnumerator: Uppräkning av inbyggda eller underliggande språkkonstruktioner (C/C++)

Gränssnittet IRawEnumerator är det enda gränssnittet för uppräkning av alla inbyggda/språkkonstruktioner (efter värde eller referens) i ett objekt som representerar en inbyggd konstruktion inom adressutrymmet för felsökningsmålet. Gränssnittet definieras på följande sätt:

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

Nollställa

Metoden Återställ återställer uppräknaren till den position den befann sig på när den först förvärvades (t.ex. före det första elementet i uppräkningen). Ett efterföljande anrop till GetNext returnerar den första uppräknade inbyggda/språk-konstruktionen.

GetNext

Metoden GetNext flyttar både uppräknaren framåt och returnerar konstruktionen native/language på den positionen i uppräkningen.


Se även

Det här avsnittet är en del av en serie som beskriver de gränssnitt som är tillgängliga från C++, hur du använder dem för att skapa ett C++-baserat felsökningstillägg och hur du använder andra datamodellkonstruktioner (t.ex. JavaScript eller NatVis) från ett C++-datamodelltillägg.

Felsökningsdatamodell C++ Översikt

Felsökarens C++-gränssnitt för datamodell

Felsöka datamodell C++-objekt

Felsökningsdatamodell C++ Begrepp

Felsökning av datamodell C++-skript