Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Aggiornamento: novembre 2007
Le informazioni contenute in questo argomento sono valide per:
Edition |
Visual Basic |
C# |
C++ |
Web Developer |
|---|---|---|---|---|
Express |
![]() |
![]() |
![]() |
![]() |
Standard |
|
|
|
|
Pro e Team |
|
|
|
|
Legenda tabella:
![]() |
Applicabile |
![]() |
Non applicabile |
![]() |
Comando o comandi nascosti per impostazione predefinita. |
L'attributo DebuggerDisplay (System.Diagnostics.DebuggerDisplayAttribute) controlla la modalità di visualizzazione di una classe o di un campo nelle finestre delle variabili del debugger. Questo attributo può essere applicato a:
Classi
Strutture
Delegati
Enumerazioni
Campi
Proprietà
Assembly
L'attributo DebuggerDisplay presenta un solo argomento, costituito da una stringa da visualizzare nella colonna Valore per le istanze del tipo. Questa stringa può contenere parentesi graffe ({ e }). Il testo racchiuso tra due parentesi graffe verrà valutato come un campo, una proprietà o un metodo.
In codice C# è possibile utilizzare un'espressione generale tra le parentesi graffe. L'espressione ha accesso implicito al puntatore this solo per l'istanza corrente del tipo di destinazione. L'espressione non ha accesso ad alias, variabili locali o puntatori. Se l'espressione fa riferimento a proprietà, gli attributi su tali proprietà non vengono elaborati.
Se un oggetto C# ha un metodo ToString() sottoposto a override, il debugger chiamerà l'override e ne visualizzerà il risultato, anziché chiamare il metodo {<typeName>} standard. Pertanto, se si è eseguito l'override del metodo ToString(), non è necessario utilizzare l'attributo DebuggerDisplay. Se si utilizzano entrambi, l'attributo DebuggerDisplay ha la precedenza sull'override di ToString().
La valutazione da parte del debugger di questa chiamata implicita a ToString() dipende da un'impostazione utente nella finestra di dialogo Opzioni (categoria Debug, pagina Generale). In Visual Basic questa valutazione implicita di ToString() non è implementata.
Nella tabella riportata di seguito vengono visualizzati alcuni utilizzi possibili dell'attributo DebuggerDisplay e alcuni output di esempio.
Attributo |
Output visualizzato nella colonna Valore |
|---|---|
[DebuggerDisplay("x = {x} y = {y}")] Utilizzato in un tipo con campi x e y. |
x = 5 y = 18 |
[DebuggerDisplay("String value is {getString()}")] La sintassi del parametro può variare a seconda del linguaggio. Prestare, pertanto, particolare attenzione. |
String value is [5, 6, 6] |
[DebuggerDisplay("Object {count - 2}: {(flag) ? \"yes\" : \"no\"}")] La sintassi dell'espressione varia a seconda del linguaggio. Prestare, pertanto, particolare attenzione. |
Object 6: yes |
[DebuggerDisplay("Last = {_lastName,nq} {_var == null ? \"\" : \"First = \" + _firstName,nq}")] ,nq consente di eliminare le virgolette. |
Se è presente il cognome: Last = lastname First = firstname In caso contrario: Last = lastname |
DebuggerDisplay può anche accettare parametri denominati.
Parametri |
Funzione |
|---|---|
Name, Type |
Questi parametri influiscono sulle colonne Nome e Tipo delle finestre delle variabili. Possono essere impostati su stringhe con la stessa sintassi del costruttore. L'utilizzo eccessivo o improprio di questi parametri può generare confusione nell'output. |
Target, TargetTypeName |
Specifica il tipo di destinazione quando l'attributo viene utilizzato a livello di assembly. |
Nota: |
|---|
Il file autoexp.cs utilizza l'attributo DebuggerDisplay a livello di assembly. Il file autoexp.cs determina le espansioni predefinite utilizzate da Visual Studio per le variabili C#. È possibile esaminare il file autoexp.cs per esempi di utilizzo dell'attributo DebuggerDisplay o è possibile modificare e compilare il file autoexp.cs per modificare le espansioni predefinite. Assicurarsi di eseguire un backup del file autoexp.cs prima di modificarlo. Fare riferimento a Microsoft.VisualStudio.DebuggerVisualizers.dll in \Programmi\Microsoft Visual Studio 9.0\Common7\IDE\PublicAssemblies. È possibile trovare il file autoexp.cs in Documenti/Visual Studio 9.0/Visualizers. |
Esempio
Nell'esempio di codice seguente viene illustrato l'utilizzo di DebuggerDisplay, insieme a DebuggerBrowseable e DebuggerTypeProxy. Quando visualizzato in una finestra delle variabili del debugger, come la finestra Espressioni di controllo, produce un'espansione analoga alla seguente:
Nome |
Valore |
Tipo |
|---|---|---|
Chiave |
"tre" |
oggetto {string} |
Valore |
3 |
oggetto {int} |
[DebuggerDisplay("{value}", Name = "{key}")]
internal class KeyValuePairs
{
private IDictionary dictionary;
private object key;
private object value;
public KeyValuePairs(IDictionary dictionary, object key, object value)
{
this.value = value;
this.key = key;
this.dictionary = dictionary;
}
public object Key
{
get { return key; }
set
{
object tempValue = dictionary[key];
dictionary.Remove(key);
key = value;
dictionary.Add(key, tempValue);
}
}
public object Value
{
get { return this.value; }
set
{
this.value = value;
dictionary[key] = this.value;
}
}
}
[DebuggerDisplay("Count = {hashtable.Count}")]
[DebuggerTypeProxy(typeof(HashtableDebugView))]
class MyHashtable
{
public Hashtable hashtable;
public MyHashtable()
{
hashtable = new Hashtable();
}
private class HashtableDebugView
{
private MyHashtable myhashtable;
public HashtableDebugView(MyHashtable myhashtable)
{
this.myhashtable = myhashtable;
}
[DebuggerBrowsable(DebuggerBrowsableState.RootHidden)]
public KeyValuePairs[] Keys
{
get
{
KeyValuePairs[] keys = new KeyValuePairs[myhashtable.hashtable.Count];
int i = 0;
foreach (object key in myhashtable.hashtable.Keys)
{
keys[i] = new KeyValuePairs(myhashtable.hashtable, key, myhashtable.hashtable[key]);
i++;
}
return keys;
}
}
}
}
Vedere anche
Concetti
Visualizzazione di tipi di dati personalizzati
Miglioramento del debug tramite gli attributi di visualizzazione del debugger
.gif)
.gif)
.gif)
Nota: