Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het Foutopsporingsprogramma van Visual Studio bevat expressie-evaluators die werken wanneer u een expressie invoert in het dialoogvenster QuickWatch , het venster Controle of het venster Direct . De expressie-evaluators zijn ook op het werk in het venster Onderbrekingspunten en op veel andere plaatsen in het foutopsporingsprogramma.
In de volgende secties worden beperkingen beschreven van de expressie-evaluatie voor talen die worden ondersteund door Visual Studio.
F#-expressies worden niet ondersteund
F#-expressies worden niet herkend. Als u F#-code foutopsporing gebruikt, moet u uw expressies omzetten in C#-syntaxis voordat u de expressies invoert in een foutopsporingsprogrammavenster of dialoogvenster. Wanneer u expressies van F# naar C# vertaalt, moet u er rekening mee houden dat C# de == operator gebruikt om te testen op gelijkheid, terwijl F# de enige =gebruikt.
C++ Expressies
Zie Contextoperator (C++) voor informatie over het gebruik van contextoperators met expressies in C++.
Niet-ondersteunde expressies in C++
Constructors, destructors en conversies
U kunt geen constructor of destructor aanroepen voor een object, expliciet of impliciet. De volgende expressie roept bijvoorbeeld expliciet een constructor aan en resulteert in een foutbericht:
my_date( 2, 3, 1985 )
U kunt een conversiefunctie niet aanroepen als de bestemming van de conversie een klasse is. Een dergelijke conversie omvat de constructie van een object. Als er bijvoorbeeld myFraction een instantie is van CFraction, waarmee de operator FixedPointvoor de conversiefunctie wordt gedefinieerd, resulteert de volgende expressie in een fout:
(FixedPoint)myFraction
U kunt de nieuwe operators niet aanroepen of verwijderen. De volgende expressie wordt bijvoorbeeld niet ondersteund:
new Date(2,3,1985)
Preprocessor Macros
Preprocessormacro's worden niet ondersteund in het foutopsporingsprogramma. Als een constante VALUE bijvoorbeeld wordt gedeclareerd als: #define VALUE 3, kunt u deze niet gebruiken VALUE in het venster Controle . Om deze beperking te voorkomen, moet u waar mogelijk 's vervangen door #defineopsommingen en functies.
declaraties van naamruimten gebruiken
U kunt geen using namespace verklaringen gebruiken.  Als u toegang wilt krijgen tot een typenaam of variabele buiten de huidige naamruimte, moet u de volledig gekwalificeerde naam gebruiken.
Anonieme naamruimten
Anonieme naamruimten worden niet ondersteund. Als u de volgende code hebt, kunt u test niet toevoegen aan het controlevenster.
namespace mars
{
    namespace
    {
        int test = 0;
    }
}
int main()
{
    // Adding a watch on test doesn't work.
    mars::test++;
    return 0;
}
Intrinsieke functies van foutopsporingsprogramma gebruiken om de status te behouden
Met de intrinsieke functies van het foutopsporingsprogramma kunt u bepaalde C/C++-functies aanroepen in expressies zonder de status van de toepassing te wijzigen.
Intrinsieke functies van foutopsporingsprogramma:
Zijn gegarandeerd veilig: het uitvoeren van een intrinsieke functie van een foutopsporingsprogramma zal het proces dat wordt opgespoord, niet beschadigen.
Zijn toegestaan in alle expressies, zelfs in scenario's waarin bijwerkingen en functie-evaluatie niet zijn toegestaan.
Werk in scenario's waarin de reguliere functieaanroepen niet mogelijk zijn, zoals het opsporen van fouten in een minidump.
De intrinsieke functies van het foutopsporingsprogramma kunnen het evalueren van expressies ook handiger maken. Is bijvoorbeeld
strcmp(str, "asd")veel gemakkelijker te schrijven in een onderbrekingspuntvoorwaarde danstr[0] == 'a' && str[1] == 's' && str[2] == 'd'. )
| Area | Intrinsieke functies | 
|---|---|
| Tekenreekslengte | strlen, wcslen, strnlen, wcsnlen | 
| Tekenreeksvergelijking | strcmp, wcscmp, stricmp, wcsicmp, _stricmp, _strcmpi, _wcsicmp, _wcscmpi, strncmp, wcsncmp, strnicmp, wcsnicmp, _strnicmp, _wcsnicmp | 
| Tekenreeks zoeken | strchr, wcschr, memchr, wmemchr, strstr, wcsstr | 
| Win32 | CoDecodeProxy, DecodePointer, GetLastError, TlsGetValue | 
| Windows 8 | 
              RoInspectCapturedStackBackTrace, WindowsCompareStringOrdinal, WindowsGetStringLen, WindowsGetStringRawBuffer Voor deze functies is vereist dat het proces dat wordt opgespoord, wordt uitgevoerd in Windows 8. Voor het opsporen van fouten in dumpbestanden die zijn gegenereerd op basis van een Windows 8-apparaat, is ook vereist dat de Visual Studio-computer Windows 8 uitvoert. Als u echter op afstand foutopsporing doet op een Windows 8-apparaat, kan de Visual Studio-computer op Windows 7 draaien. WindowsGetStringLen en WindowsGetStringRawBuffer worden alleen gebruikt door de uitvoeringsengine (EE) op het bronniveau. | 
| Miscellaneous | 
              __log2 : retourneert de logboekbasis 2 van een opgegeven geheel getal, afgerond op het dichtstbijzijnde onderste gehele getal. __findNonNull : hiermee wordt een matrix met aanwijzers doorzocht, die de index van het eerste niet-null-element retourneert. - Parameters: (1) Aanwijzer naar eerste element in matrix (void*), (2) Grootte van matrix (niet-ondertekende int). - Retourwaarden: (1) op 0 gebaseerde index van het eerste niet-null-element in matrix of -1 als deze niet is gevonden. DecodeHString - Helper-functie voor het opmaken van de waarde van een HSTRING. Hiermee wordt de HSTRING-waarde van de stack afgehaald, worden de bytes van een StringInfo-structuur gepusht die de EE kan gebruiken om de locatie van de tekenreeks vast te stellen. Dit wordt alleen intern gebruikt door de EE; het is niet beschikbaar voor de gebruiker om rechtstreeks te bellen. DecodeWinRTRestrictedException - Decodeert een WinRT-beperkte uitzondering om de beperkte beschrijving op te halen. - Parameters: (1) tekens van een null-beëindigde tekenreeks die de beperkte verwijzingstekenreeks vertegenwoordigt. - Retourwaarde: Tekens van een null-beëindigde tekenreeks die het werkelijke foutbericht bevat dat moet worden weergegeven. DynamicCast : implementeert dynamic_cast. - Parameter: (1) Aanwijzer naar object om te casten. - Gegevensitems: Een CDynamicCastData-object moet worden gekoppeld als een gegevensitem aan de bijbehorende ExecuteIntrinsic()-instructie. Het gegevensitem codeert het type waar we van en naar casten, alsmede of we een natvis-expressie evalueren (nodig binnen diagnostiek om oneindige recursie te doorbreken). - Retourwaarde: (1) Een pointer naar het object, gecast naar het juiste type, of NULL als het te casten object geen exemplaar van het juiste type is. DynamicMemberLookup - Helper-functie om de waarde van een klasselid dynamisch op te halen GetEnvBlockLength - Helper-functie voor het ophalen van de lengte van een omgevingsblok, in tekens. Wordt gebruikt voor $env. Stdext_HashMap_Int_OperatorBracket_idx - Operator[] voor stdext::hash_map. Hierbij wordt ervan uitgegaan dat de standaard-hash-functie een sleutel van 'int' heeft. Retourneert de waarde. De intrinsieke operator[] biedt alleen ondersteuning voor het ophalen van bestaande items uit de hashtabel. Het biedt geen ondersteuning voor het invoegen van nieuwe items in de tabel, omdat dit ongewenste complexiteit kan omvatten, zoals geheugentoewijzing. Operator[] kan echter worden gebruikt om de waarde te wijzigen die is gekoppeld aan een sleutel die al in de tabel staat. - Stackparameters: (1) Het adres van het stdext::hash_map-object, (2) De sleutel in de tabel (int), (3) een HashMapPdb-structuur die de veldverschuivingen aangeeft van leden die de functie-implementatie nodig heeft om de zoekactie uit te voeren. Dit is vereist omdat directe toegang tot symbolen niet beschikbaar is aan de externe zijde. - Retourwaarden: (1) Als de sleutel zich in de tabel bevindt, wordt het adres van de waarde die overeenkomt met de sleutel geretourneerd. Zo niet, NULL. Std_UnorderedMap_Int_OperatorBracket_idx - std::unordered_map werkt op dezelfde manier als stdext::hash_map, behalve dat de hash-functie anders is. ConcurrencyArray_OperatorBracket_idx // Gelijktijdigheid::matrix<>::operator[index<>] en operator(index<>) ConcurrencyArray_OperatorBracket_int // Gelijktijdigheid::matrix<>::operator(int, int, ...) ConcurrencyArray_OperatorBracket_tidx // Gelijktijdigheid::matrix<>::operator[tiled_index<>] en operator(tiled_index<>) ConcurrencyArrayView_OperatorBracket_idx // Gelijktijdigheid::array_view<>::operator[index<>] en operator(index<>) ConcurrencyArrayView_OperatorBracket_int // Gelijktijdigheid::array_view<>::operator(int, int, ...) ConcurrencyArrayView_OperatorBracket_tidx // Gelijktijdigheid::array_view<>::operator[tiled_index<>] en operator(tiled_index<>) TreeTraverse_Init - Initialiseert een nieuwe doorkruising van een boom. Ondersteunt visualizers gebaseerd op extensies, niet bedoeld voor gebruik in .natvis-bestanden. TreeTraverse_Next - haalt knooppunten op uit een wachtende boomdoorloop. Ondersteunt visualiseerders op basis van extensies, niet bedoeld om te worden gebruikt in .natvis-bestanden. TreeTraverse_Skip - slaat knooppunten over in een boomtraversering. Ondersteunt visualizers op basis van extensies, niet bedoeld voor gebruik in .natvis-bestanden.  | 
C++/CLI - Niet-ondersteunde expressies
Casts die betrekking hebben op aanwijzers of door de gebruiker gedefinieerde casts, worden niet ondersteund.
Objectvergelijking en -toewijzing worden niet ondersteund.
Overbelaste operators en overbelaste functies worden niet ondersteund.
Boxing en unboxing worden niet ondersteund.
De
Sizeofoperator wordt niet ondersteund.
C# - Niet-ondersteunde expressies
Dynamische objecten
U kunt variabelen gebruiken in foutopsporingsprogramma-expressies die statisch zijn getypt als dynamisch. Wanneer objecten die IDynamicMetaObjectProvider implementeren worden geëvalueerd in het Watch-venster, wordt er een knooppunt voor dynamische weergave toegevoegd. Het knooppunt Dynamische weergave toont objectleden, maar staat het bewerken van de waarden van de leden niet toe.
De volgende functies van dynamische objecten worden niet ondersteund:
De samengestelde operatoren
+=,-=, ,%=en/=*=Veel omzettingen, waaronder numerieke omzettingen en type-argument omzettingen
Methode-aanroepen met meer dan twee argumenten
Eigenschap-getters met meer dan twee argumenten
Eigenschappensetters met argumenten
Toewijzen aan een indexer
Booleaanse operatoren
&&en||
Anonieme methoden
Het maken van nieuwe anonieme methoden wordt niet ondersteund.
Visual Basic - Niet-ondersteunde expressies
Dynamische objecten
U kunt variabelen gebruiken in expressies in de debugger die statisch getypt zijn als dynamisch. Wanneer objecten die de IDynamicMetaObjectProvider implementatie implementeren, worden geëvalueerd in het venster Watch, wordt er een knooppunt voor dynamische weergave toegevoegd. Het knooppunt Dynamische weergave toont objectleden, maar staat het bewerken van de waarden van de leden niet toe.
De volgende functies van dynamische objecten worden niet ondersteund:
De samengestelde operatoren
+=,-=, ,%=en/=*=Veel omzettingen, waaronder numerieke omzettingen en type-argument omzettingen
Methode-aanroepen met meer dan twee argumenten
Eigenschapsgetters met meer dan twee argumenten
Eigenschappensetters met argumenten
Toewijzen aan een indexeerder
Booleaanse operatoren
&&en||
Lokale constanten
Lokale constanten worden niet ondersteund.
Aliassen importeren
Importaliassen worden niet ondersteund.
Variabelendeclaraties
U kunt geen expliciete nieuwe variabelen declareren in foutopsporingsprogrammavensters. U kunt echter nieuwe impliciete variabelen toewijzen in het venster Direct . Deze impliciete variabelen zijn gericht op de foutopsporingssessie en zijn niet toegankelijk buiten het foutopsporingsprogramma. De instructie o = 5 maakt bijvoorbeeld impliciet een nieuwe variabele o en wijst de waarde 5 eraan toe. Dergelijke impliciete variabelen zijn van het type Object , tenzij het type kan worden afgeleid door het foutopsporingsprogramma.
Niet-ondersteunde trefwoorden
AddressOfEndErrorExitGotoOn ErrorResumeReturnSelect/CaseStopSyncLockThrowTry/Catch/FinallyWithTrefwoorden op naamruimte- of moduleniveau, zoals
End SubofModule.