Depurando propriedades automáticas

126

Existe alguma maneira de definir o ponto de interrupção no setter / getter na propriedade implementada automaticamente?

int Counter { get; set; }

Além de alterá-lo para propriedade padrão (estou fazendo isso dessa maneira, mas para fazer isso, preciso alterar e recompilar o projeto inteiro)

Marek Kwiendacz
fonte
2
Com qual IDE você está trabalhando? Estúdio visual? (Sugiro que você adicione uma tag correspondente à sua pergunta, pois ela está mais relacionada a um IDE específico do que à própria linguagem C #.)
stakx - não está mais contribuindo com o
5
@stakx no mundo do .NET temos um IDE padrão :)
Stilgar
1
@Tilgar, estou ciente disso, estou usando o VS, afinal. Mas "padrão" não significa que seja o único, nem que todos o usem. Como essa é uma pergunta do IDE, é importante saber para qual IDE estamos analisando aqui. Daí o meu comentário anterior.
stakx - não contribui mais com
4
@takx bem, quando não há menção do IDE para uma questão relacionada ao .NET, presume-se que seja VS. O que é mais eu foi principalmente brincando :)
Stilgar

Respostas:

220

Usando o Visual Studio 2008, 2010, 2012, 2013:

  1. Vá para a janela Breakpoint
  2. Novo -> Interrupção na função…
  3. Para o get, digite:ClassName.get_Counter()

    Para o set, digite:ClassName.set_Counter(int)

Você receberá uma "Nenhuma fonte disponível" quando o ponto de interrupção for atingido, mas o local da chamada na pilha de chamadas.

Encontrei esta solução aqui no MSDN

Matt smith
fonte
Brilhante. Obrigado. Não preciso mais alterar as propriedades automáticas para o padrão (com campo). E não mais recompilação :)
Marek Kwiendacz
9
isso também funciona para construtores padrão. useClassName.ctor
Călin Darie 04/04
11
VS2015 tem corrigido este por apenas definir os pontos de interrupção na auto getter e setter :)
cateyes
1
Não funciona aqui. Eu tentei os dois Form.set_Heighte MainWindow.set_Height, nem funcionou.
Hi-Angel
@ Hi-Angel, observe que para setters, você tem que incluir o tipo, então algo como Form.set_Height (int)
Matt Smith
7

Se eu fosse você, temporariamente tornaria a propriedade uma propriedade padrão, apoiada por um campo interno ... definiria seus pontos de interrupção e você poderá alterá-la novamente depois.

Kieron
fonte
2

No Visual Studio 2017:

Passe o mouse sobre a palavra "definir" -> clique com o botão direito do mouse -> Ponto de interrupção -> Inserir ponto de interrupção

Antes:

Antes

Depois de:

Depois de

andreyk2 Hohlov
fonte
0

Defina pontos de interrupção nos quais você está definindo ou obtendo propriedades, de nenhuma outra maneira.

você pode fazer isso pelas opções Localizar todas as referências

E como ele está apenas armazenando valores e não possui nenhum código na parte do setter, o que você depura?

TalentTuner
fonte
3
sim, mas e quando você o usa em, por exemplo, 20 lugares? E cada novo ponto de interrupção diminui o processo de depuração. Ou então, e se o acesso à propriedade for feito por estrutura (por exemplo, serialização)?
Marek Kwiendacz
1
Pontos de interrupção condicionais. Coloque o ponto de ruptura em, clique o botão direito e atribuir uma condição a ele ...
Phill