Débogage des propriétés automatiques

126

Existe-t-il un moyen de définir un point d'arrêt sur le setter / getter dans la propriété implémentée automatiquement?

int Counter { get; set; }

Autre que le changer en propriété standard (je le fais de cette manière, mais pour ce faire, je dois changer et recompiler tout le projet)

Marek Kwiendacz
la source
2
Avec quel IDE travaillez-vous? Visual Studio? (Je vous suggère d'ajouter une balise correspondante à votre question, car cela est en fait plus lié à un IDE particulier qu'au langage C # lui-même.)
stakx - ne contribue plus
5
@stakx dans le monde .NET, nous avons un IDE par défaut :)
Stilgar
1
@Stilgar, j'en suis conscient, j'utilise VS moi-même, après tout. Mais «par défaut» ne veut pas dire que c'est le seul, ni que tout le monde l' utilise. Puisqu'il s'agit d'une question IDE, il est donc important de savoir quel IDE nous examinons ici. D'où mon commentaire précédent.
stakx - ne contribue plus
4
@stakx bien quand il n'y a aucune mention de l'EDI pour une question liée à .NET, on suppose qu'il s'agit de VS. De plus, je plaisantais surtout :)
Stilgar

Réponses:

220

À l'aide de Visual Studio 2008, 2010, 2012, 2013:

  1. Allez dans la fenêtre Breakpoint
  2. Nouveau -> Pause à la fonction…
  3. Pour le get, tapez:ClassName.get_Counter()

    Pour le set, tapez:ClassName.set_Counter(int)

Vous obtiendrez un "Aucune source disponible" lorsque le point d'arrêt est atteint, mais vous obtiendrez l'emplacement d'appel dans la pile d'appels.

J'ai trouvé cette solution ici sur MSDN

Matt Smith
la source
Brillant. Merci. Je n'ai plus besoin de changer les propriétés automatiques en propriétés standard (avec champ). Et plus de recompilation :)
Marek Kwiendacz
9
cela fonctionne également pour les constructeurs par défaut. utilisationClassName.ctor
Călin Darie
11
VS2015 a corrigé ce problème en définissant simplement les points d'arrêt sur le getter et le setter automatiques :)
cateyes
1
Ça ne marche pas ici. J'ai essayé les deux Form.set_Heightet MainWindow.set_Height, aucun n'a fonctionné.
Hi-Angel
@ Salut-Angel, notez que pour les setters, vous devez inclure le type, donc quelque chose comme Form.set_Height (int)
Matt Smith
7

Si j'étais vous, je ferais temporairement de la propriété une propriété standard soutenue par un champ interne ... définissez vos points d'arrêt, puis vous pourrez la modifier après.

Kieron
la source
3

Sur Visual Studio 2017:

Survolez le mot "définir" -> clic droit -> Point d'arrêt -> Insérer un point d'arrêt

Avant:

Avant

Après:

Après

andreyk2 Hohlov
la source
0

Définissez les points d'arrêt où vous définissez une propriété ou obtenez une propriété, pas d'autre moyen.

vous pouvez le faire par les options Rechercher toutes les références

Et comme il ne stocke que des valeurs et n'a pas de code dans la partie setter, que faites-vous déboguer?

TalentTuner
la source
3
oui, mais que faire quand vous l'utilisez par exemple dans 20 endroits? Et chaque nouveau point d'arrêt ralentit le processus de débogage. Ou, que se passe-t-il si l'accès à la propriété se fait par framework (par exemple la sérialisation)?
Marek Kwiendacz
1
Points de rupture conditionnels. Mettez le point de rupture, cliquez dessus avec le bouton droit et assignez-lui une condition ...
Phill