2009-09-01 6 views
2

Je rencontre des problèmes avec la même instance d'une classe C# utilisée à plusieurs endroits. Je voudrais être en mesure de dire à un coup d'oeil dans le débogueur qui est par exemple qui, j'ai ajouté un champ appelé DebugUID comme ceci:Comment faire un champ être déboguer-seulement en C#?

public readonly string DebugUID = Guid.NewGuid().ToString(); 

et je l'ai également ajouté l'attribut [DebuggerDisplay("DebugUID= {DebugUID}")] à la classe.

Je voudrais que le compilateur ignore le champ DebugUID en mode release. Si c'était une méthode, j'ajouterais [Conditional("Debug")] avant, mais il ne me laissera pas faire cela pour les champs. Comment faire un champ être déboguer-seulement en C#?

Répondre

13

C# a des fonctions de compilation conditionnelles analogues à celles de C/C++. Vous pouvez utiliser l'instruction #if avec une directive de compilation comme DEBUG pour ce faire.

#if DEBUG 
public readonly string DebugUID = Guid.NewGuid().ToString(); 
#endif 

Depuis par défaut, seules les configurations "Debug" définissent la directive DEBUG, cela ne compile en mode débogage. En mode Release, le code à l'intérieur du #if sera ignoré.

1

Essayez d'utiliser la directive "préprocesseur" #if:

class Value { 

#if DEBUG 
private readonly string DebugUID = Guid.NewGuid().ToString() 
#endif 

} 

Vous devez vous assurer, cependant, que le DEBUG drapeau est défini pour le débogage construit (et bien sûr, pour unset versions de versions).

1

Vous pouvez utiliser un préprocesseur conditionnel comprennent

#if DEBUG 
private readonly string debugId = Guid.NewGuid().ToString(); 
#endif 
4

Puis-je proposer une alternative qui consiste à utiliser le débogueur plutôt que d'écrire du code?

Cliquez avec le bouton droit sur l'instance dans la fenêtre de surveillance et choisissez "Attribuer l'ID de l'objet". Cet objet apparaîtra maintenant avec cet ID tout au long de votre session de débogage. Répétez pour d'autres instances de la même classe qui vous intéressent.

+0

Je ne pense pas que je puisse le faire dans ce cas, du moins pas au début - il y a trop d'objets en question - mais merci de m'avoir informé de cette fonctionnalité! – Simon

Questions connexes