Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Visual Studio-felsökningsprogrammet innehåller uttrycksutvärderingar som fungerar när du anger ett uttryck i dialogrutan QuickWatch , bevakningsfönstret eller fönstret Omedelbart . Uttrycksutvärderingarna arbetar också i fönstret Brytpunkter och många andra platser i felsökningsprogrammet.
I följande avsnitt beskrivs begränsningar för utvärdering av uttryck för språk som stöds av Visual Studio.
F#-uttryck stöds inte
F#-uttryck känns inte igen. Om du felsöker F#-kod måste du översätta dina uttryck till C#-syntax innan du anger uttrycken i ett felsökningsfönster eller en dialogruta. När du översätter uttryck från F# till C# måste du komma ihåg att C# använder operatorn == för att testa för likhet, medan F# använder den enda =.
C++-uttryck
Information om hur du använder kontextoperatorer med uttryck i C++, finns i Kontextoperator (C++).
Uttryck som inte stöds i C++
Konstruktorer, destruktorer och konverteringar
Du kan inte anropa en konstruktor eller destruator för ett objekt, varken explicit eller implicit. Följande uttryck anropar till exempel uttryckligen en konstruktor och resulterar i ett felmeddelande:
my_date( 2, 3, 1985 )
Du kan inte anropa en konverteringsfunktion om konverteringens mål är en klass. En sådan konvertering innebär att ett objekt byggs. Om till exempel myFraction är en instans av CFraction, som definierar konverteringsfunktionsoperatorn FixedPoint, resulterar följande uttryck i ett fel:
(FixedPoint)myFraction
Du kan inte anropa de nya operatorerna eller ta bort operatorerna. Följande uttryck stöds till exempel inte:
new Date(2,3,1985)
Makron för förprocessor
Makron för förprocessor stöds inte i felsökningsprogrammet. Om en konstant VALUE till exempel deklareras som: #define VALUE 3kan du inte använda VALUE i bevakningsfönstret . För att undvika den här begränsningen bör du ersätta #define's med uppräkningar och funktioner när det är möjligt.
använda namnområdesdeklarationer
Du kan inte använda using namespace deklarationer. För att få åtkomst till ett typnamn eller en variabel utanför det aktuella namnområdet måste du använda det fullständigt kvalificerade namnet.
Anonyma namnområden
Anonyma namnområden stöds inte. Om du har följande kod kan du inte lägga till test i klockfönstret:
namespace mars
{
namespace
{
int test = 0;
}
}
int main()
{
// Adding a watch on test doesn't work.
mars::test++;
return 0;
}
Använda inbyggda funktioner i felsökningsprogrammet för att upprätthålla tillståndet
Med inbyggda funktioner för felsökningsprogrammet kan du anropa vissa C/C++-funktioner i uttryck utan att ändra programmets tillstånd.
Inbyggda funktioner för felsökningsprogram:
Är garanterat säkra: om du kör en inbyggd felsökningsfunktion skadas inte den process som debuggas.
Tillåts i alla uttryck , även i scenarier där biverkningar och funktionsutvärdering inte tillåts.
Arbeta i scenarier där vanliga funktionsanrop inte är möjliga, till exempel felsökning av en minidump.
Debugger-inbyggda funktioner kan också göra det enklare att utvärdera uttryck. Det är till exempel
strcmp(str, "asd")mycket enklare att skriva i ett brytpunktsvillkor änstr[0] == 'a' && str[1] == 's' && str[2] == 'd'. )
| Area | Inbyggda funktioner |
|---|---|
| Stränglängd | strlen, wcslen, strnlen, wcsnlen |
| Strängjämförelse | strcmp, wcscmp, stricmp, wcsicmp, _stricmp, _strcmpi, _wcsicmp, _wcscmpi, strncmp, wcsncmp, strnicmp, wcsnicmp, _strnicmp, _wcsnicmp |
| Strängsökning | strchr, wcschr, memchr, wmemchr, strstr, wcsstr |
| Win32 | CoDecodeProxy, DecodePointer, GetLastError, TlsGetValue |
| Windows 8 |
RoInspectCapturedStackBackTrace, WindowsCompareStringOrdinal, WindowsGetStringLen, WindowsGetStringRawBuffer Dessa funktioner kräver att processen som debuggas körs på Windows 8. Felsökning av dumpfiler som genereras från en Windows 8-enhet kräver också att Visual Studio-datorn kör Windows 8. Men om du felsöker en Windows 8-enhet via en fjärranslutning kan Visual Studio-datorn köra Windows 7. WindowsGetStringLen och WindowsGetStringRawBuffer används endast av exekveringsmotorn (EE) på källnivå. |
| Diverse |
__log2 – Returnerar loggbas 2 för ett angivet heltal, avrundat till närmaste lägre heltal. __findNonNull – Söker i en matris med pekare och returnerar indexet för det första elementet som inte är null. – Parametrar: (1) Pekare till det första elementet i matrisen (void*), (2) Matrisstorlek (osignerad int). – Returnera värden: (1) 0-baserat index för det första icke-null-elementet i matrisen eller -1 om det inte hittas. DecodeHString – hjälpfunktionen för att formatera värdet för en HSTRING. Plockar bort HSTRING-värdet från stacken och trycker bytes för en StringInfo-struktur som EE kan använda för att avgöra var strängen finns. Detta används endast internt av EE. Det är inte tillgängligt för användaren att anropa direkt. DecodeWinRTRestrictedException – Avkodar ett WinRT-begränsat undantag för att hämta den begränsade beskrivningen. - Parametrar: (1) tecken i en null-avslutad sträng som representerar den begränsade referenssträngen. – Returvärde: Tecken i en null-avslutad sträng som innehåller det faktiska felmeddelandet som ska visas. DynamicCast – Implementerar dynamic_cast. – Parametrar: (1) Pekare till objekt som ska kastas. – Dataobjekt: Ett CDynamicCastData-objekt ska associeras som ett dataobjekt till motsvarande ExecuteIntrinsic()-instruktion. Dataobjektet kodar vilken typ vi konverterar från och till, samt om vi utvärderar ett natvis-uttryck (krävs för diagnostik för att bryta en oändlig rekursionscykel). - Returvärde: (1) En pekare till objektet, typomvandlad till rätt typ eller NULL om objektet som typomvandlas inte är en instans av rätt typ. DynamicMemberLookup – hjälpfunktionen för att hämta värdet för en klassmedlem dynamiskt GetEnvBlockLength – hjälpfunktionen för att få längden på ett miljöblock, i tecken. Används för $env. Stdext_HashMap_Int_OperatorBracket_idx – Operator[] för stdext::hash_map. Förutsätter standard-hash-funktionen med nyckeln "int". Returnerar värdet. Den inbyggda operatorn[] stöder endast hämtning av befintliga objekt från hashtabellen – den stöder inte infogning av nya objekt i tabellen, eftersom det kan innebära oönskad komplexitet, till exempel minnesallokering. Operatorn[] kan dock användas för att ändra värdet som är associerat med en nyckel som redan finns i tabellen. - Stackparametrar: (1) Adressen till objektet stdext::hash_map, (2) Nyckeln i tabellen (int), (3) en HashMapPdb-struktur som anger fältförskjutningar för medlemmar som funktionsimplementeringen behöver för att utföra sökningen. Detta krävs eftersom direkt åtkomst till symboler inte är tillgänglig på fjärrsidan. - Returvärden: (1) Om nyckeln finns i tabellen, adressen till det värde som motsvarar nyckeln. Annars NULL. Std_UnorderedMap_Int_OperatorBracket_idx – std::unordered_map fungerar på samma sätt som stdext::hash_map, förutom att hash-funktionen är annorlunda. ConcurrencyArray_OperatorBracket_idx // Concurrency::array<>::operator[index<>] och operator(index<>) ConcurrencyArray_OperatorBracket_int // Konkorren::matris<>::operator(int, int, ...) ConcurrencyArray_OperatorBracket_tidx // Samtidighet::matris<>::operator[tiled_index<>] och operator(tiled_index<>) ConcurrencyArrayView_OperatorBracket_idx // Concurrency::array_view<>::operator[index<>] och operator(index<>) ConcurrencyArrayView_OperatorBracket_int // Konkurrens::array_view<>::operator(int, int, ...) ConcurrencyArrayView_OperatorBracket_tidx // Concurrency::array_view<>::operator[tiled_index<>] och operator(tiled_index<>) TreeTraverse_Init – Initierar en ny trädbläddering. Har stöd för tilläggsbaserade visualiserare som inte är avsedda att användas i .natvis-filer . TreeTraverse_Next – Hämtar noder från en väntande trädbläddering. Har stöd för tilläggsbaserade visualiserare som inte är avsedda att användas i .natvis-filer . TreeTraverse_Skip – Hoppar över noder i en väntande trädtraversering. Har stöd för tilläggsbaserade visualiserare som inte är avsedda att användas i .natvis-filer . |
C++/CLI – Uttryck som inte stöds
Casts som omfattar pekare eller användardefinierade casts stöds inte.
Objektjämförelse och tilldelning stöds inte.
Överlagrade operatorer och överbelastade funktioner stöds inte.
Boxning och avboxning stöds inte.
Sizeofoperatorn stöds inte.
C# – Uttryck som inte stöds
Dynamiska objekt
Du kan använda variabler i felsökningsuttryck som statiskt skrivs som dynamiska. När objekt som implementeras IDynamicMetaObjectProvider utvärderas i bevakningsfönstret läggs en nod för dynamisk vy till. Noden Dynamisk vy visar objektmedlemmar men tillåter inte redigering av medlemmarnas värden.
Följande funktioner i dynamiska objekt stöds inte:
De sammansatta operatorerna
+=,-=,%=,/=och*=Många typkonverteringar, inklusive numeriska typkonverteringar och type-argumenttypkonverteringar
Metodanrop med fler än två argument
Egenskapsmottagare med fler än två argument
Egenskapsuppsättningar med argument
Tilldela till en indexerare
Booleska operatorer
&&och||
Anonyma metoder
Det går inte att skapa nya anonyma metoder.
Visual Basic – Uttryck som inte stöds
Dynamiska objekt
Du kan använda variabler i felsökningsuttryck som statiskt skrivs som dynamiska. När IDynamicMetaObjectProvider-implementerande objekt utvärderas i bevakningsfönstret, läggs en nod för Dynamisk vy till. Noden Dynamisk vy visar objektmedlemmar men tillåter inte redigering av medlemmarnas värden.
Följande funktioner i dynamiska objekt stöds inte:
De sammansatta operatorerna
+=,-=,%=,/=och*=Många typekonverteringar, inklusive numeriska typekonverteringar och type-argumentkonverteringar
Metodanrop med fler än två argument
Egenskapsmottagare med fler än två argument
Egenskapsinställare med argument
Tilldela till en indexerare
Booleska operatorer
&&och||
Lokala konstanter
Lokala konstanter stöds inte.
Importera alias
Importalias stöds inte.
Variabeldeklarationer
Du kan inte deklarera explicita nya variabler i felsökningsfönster. Du kan dock tilldela nya implicita variabler i fönstret Omedelbart . Dessa implicita variabler är begränsade till felsökningssessionen och är inte tillgängliga utanför felsökningsprogrammet. Instruktionen o = 5 skapar till exempel implicit en ny variabel o och tilldelar värdet 5 till den. Sådana implicita variabler är av typen Object såvida inte typen kan härledas av felsökningsprogrammet.
Nyckelord som inte stöds
AddressOfEndErrorExitGotoOn ErrorResumeReturnSelect/CaseStopSyncLockThrowTry/Catch/FinallyWithNyckelord på namnområdes- eller modulnivå, till exempel
End SubellerModule.