Espressioni gestite in C++
L'analizzatore di espressioni gestite accetta la maggior parte delle espressioni scritte in Visual C++.Negli argomenti riportati di seguito vengono fornite informazioni specifiche e vengono illustrati alcuni tipi di espressioni non supportati:
Identificatori e tipi
Valutazione delle funzioni
Operatori
Operatori di overload
Stringhe
Cast
Confronto e assegnazione di oggetti
Operatori typeof e sizeof
Boxing
Valutazione delle proprietà
L'analizzatore di espressioni ignora i qualificatori di accesso public, protected, internal e private.È ad esempio possibile chiamare un metodo private dalla finestra Espressioni di controllo.
L'analizzatore di espressioni esegue tutte le valutazioni in un contesto unsafe implicito, indipendentemente dal fatto che il codice eseguito sia di tipo safe o unsafe.
Per visualizzare il contenuto di un tipo di dati in formato significativo, nel debugger vengono utilizzate regole di espansione automatica.Se necessario, è possibile aggiungere elementi di espansione automatica personalizzati per visualizzare tipi di dati personalizzati.Per ulteriori informazioni, vedere Visualizzazione degli elementi di un tipo di dati personalizzato.
Identificatori e tipi
Nelle espressioni del debugger è possibile utilizzare qualsiasi identificatore visibile nell'ambito corrente.Se, ad esempio, il debugger viene interrotto nella funzione magh, è possibile utilizzare qualsiasi identificatore visibile all'interno di magh, tra cui costanti, nomi di variabili e nomi di funzioni.
Nel debugger è possibile visualizzare correttamente qualsiasi variabile di tipo primitive, enum o intrinsic.Nel caso di variabili di tipo class, il valore viene visualizzato correttamente in base al tipo derivato di livello più basso.Se si dispone di un oggetto leo di tipo lion derivato dal tipo cat, è possibile valutare leo.clawlength e ottenere il valore corretto per un oggetto di tipo lion.
È possibile assegnare un nuovo valore a qualsiasi espressione nella parte sinistra che è un l-value di tipo primitivo.Le assegnazioni ai tipi classe e matrice non sono supportate.
Valutazione delle funzioni
Il debugger supporta la valutazione delle funzioni, tra cui quelle in overload.Di conseguenza, quando si immette una delle espressioni seguenti, il debugger chiama la versione corretta della funzione in overload:
kanga ()
kanga (roo)
La valutazione di una funzione nel debugger comporta la chiamata e l'esecuzione del codice relativo a tale funzione.Se la funzione genera effetti collaterali, quali l'allocazione di memoria o la modifica del valore di una variabile globale, la valutazione della funzione in una finestra del debugger comporterà la modifica dello stato del programma e questa operazione può produrre risultati imprevisti.
Quando si imposta un punto di interruzione su una funzione in overload, la posizione del punto di interruzione dipende dal modo in cui si specifica la funzione.Se si specifica solo il nome della funzione, verrà impostato un punto di interruzione su ogni overload del nome della funzione.Se si specifica la firma completa, ossia il nome della funzione e l'elenco completo degli argomenti, verrà impostato un punto di interruzione sull'overload specificato.
Operatori
Nel debugger viene eseguita correttamente la valutazione della maggior parte degli operatori incorporati, tra cui:
Operatori relazionali: (expr1 >expr2, expr1 < expr2, expr1 <= expr2, expr1 => expr2, expr1 == expr2, expr1 != expr2).
Operatori booleani: (expr1 && expr2, expr1 || expr2).
Operatore condizionale: (expr1 ?expr2 : expr3).
Operatori aritmetici: ( expr1 + expr2, expr1 - expr2,expr1 * expr2, expr1 / expr2, % expr1expr2).
Operatori bit per bit: (expr1 & expr2, expr1 ^ expr2, expr1 | expr2, expr1 ~ expr2).
Operatori shift.Esempi: (>>expr2diexpr1 , <<expr2di expr1 , >>> expr2di expr1 ).
Operatori di assegnazione: (lvalue = expr2, *= expr2, lvalue/= expr2, lvalue %= expr2, lvalue += expr2, lvalue di lvalue - = expr2, <<= expr2, lvalue >>=expr2, &= expr2, ^= expr2, lvalue di lvalue di lvalue di lvalue |= expr2).
Operatori unari.Esempi: (+expr1, - expr1, expr1C++, C++expr1, expr1--, --expr1 ).
È possibile utilizzare l'operatore virgola per fornire una serie dell'espressione: expr1, expr2,expr3.
Operatori di overload
Nel debugger è possibile utilizzare la maggior parte degli operatori di overload.
Gli operatori infissi di overload +, -, /, %, e & sono supportati:
expr1 + expr2
+ expr1expr2
expr1 / expr2
expr1 % expr2
expr1 & expr2
Gli operatori infissi di overload =, &&, &, ||, | e ^ non sono supportati:
expr1 = expr2
expr1 && expr2
expr1 & expr2
expr1 || expr2
+ expr1 | expr2
expr1 ^ expr2
Gli operatori relazionali di overload ==, !=, >, <, >= e <= non sono supportati per C++:
expr1 == expr2
expr1 != expr2
expr1 > expr2
expr1 < expr2
expr1 >= expr2
expr1 <= expr2
Gli operatori infissi di overload |, ^, <<, >>, >, <, >= e <= non sono supportati:
+ expr1 | expr2
expr1 ^ expr2
expr1 << expr2
expr1 >> expr2
expr1 > expr2
expr1 < expr2
expr1 >= expr2
expr1 <= expr2
Gli operatori prefissi di overload +, -, ++, --, ! e ~ sono supportati:
+expr1
-expr1
Vieneexpr1
--expr1
!+ expr1
~expr1
Gli operatori suffissi di overload ++ e -- sono supportati:
expr1++
expr1--
L'operatore di overload [] è supportato:
- x[expr2]
Matrici multidimensionali
L'analizzatore di espressioni C++ utilizza la sintassi C# per le matrici multidimensionali,Di seguito è riportato un esempio:
c[0,0]
L'utilizzo della sintassi C++ normale genera un errore:
Errore dic[0][0] : il 0 " degli indici dal limite per il puntatore o la matrice “c„
Stringhe
Quando utilizzato con stringhe e matrici, l'operatore di indice viene riconosciuto.È ad esempio possibile digitare:
"hello world"[0]
Nella finestra Espressioni di controllo verrà visualizzato il valore corretto:
'h'
Cast
Nel debugger possono essere utilizzate espressioni cast semplici:
(A)x
I cast che implicano l'utilizzo di puntatori non possono essere utilizzati nel debugger.
I cast definiti dall'utente non sono supportati nel debugger per Visual C++.
Confronto e assegnazione di oggetti
Le operazioni di confronto e assegnazione di oggetti nel debugger non sono supportate per Visual C++.
Operatori typeof e sizeof
Il debugger supporta l'operatore typeof trasformandolo nella funzione .NET Framework equivalente.
typeof ( espressione)
viene trasformato in:
System.Type.GetType(expression )
Viene quindi valutata l'espressione trasformata.
Il debugger non supporta l'operatore sizeof.
Boxing e unboxing
L'analizzatore di espressioni del debugger non supporta le operazioni di boxing e unboxing in Visual C++.Per ulteriori informazioni, vedere Boxing e unboxing.Una variabile integer i convertita in oggetto mediante boxing verrà valutata come integer e non come oggetto.I risultati potrebbero non essere quelli desiderati.
Valutazione delle proprietà
Il debugger è in grado di valutare le proprietà in qualsiasi finestra di variabile.La valutazione di una proprietà nel debugger può tuttavia produrre effetti collaterali che generano risultati imprevisti e indesiderati.Per evitare gli effetti collaterali causati da una valutazione accidentale, è possibile disattivare la valutazione delle proprietà nella finestra di dialogo Opzioni.
WebMethod
Non è possibile chiamare WebMethod dalle finestre del debugger.