Existe uma maneira de colocar um relógio na variável e apenas o Visual Studio quebrar quando esse valor muda?
Seria muito mais fácil encontrar problemas estatais complicados.
Isso pode ser feito?
As condições do ponto de interrupção ainda precisam de um conjunto de pontos de interrupção, e eu prefiro definir um relógio e deixar o Visual Studio definir os pontos de interrupção nas alterações de estado.
Respostas:
No menu do Visual Studio 2005:
Depurar -> Novo ponto de interrupção -> Novo ponto de interrupção de dados
Entrar:
fonte
Você também pode optar por quebrar explicitamente o código:
Do MSDN:
Esta é apenas uma alternativa, no entanto. Definir um ponto de interrupção condicional no Visual Studio, conforme descrito em outros comentários, é uma escolha melhor.
fonte
Realmente antigo post, mas no caso de alguém não sabe ...
No Visual Studio 2015 , você pode colocar um ponto de interrupção no
set
acessador de uma propriedade implementada automaticamente e o depurador será interrompido quando a propriedade for atualizadaAtualizar
Alternativamente; O @AbdulRaufMujahid indicou nos comentários que, se a propriedade implementada automaticamente estiver em uma única linha, você poderá posicionar o cursor na tecla
get;
orset;
e hitF9
e um ponto de interrupção será colocado de acordo. Agradável!fonte
Imagine que você tem uma classe chamada A com a seguinte declaração.
Você deseja que o programa pare quando alguém modificar o valor de "m_value".
Vá para a definição de classe e coloque um ponto de interrupção no construtor de A.
Depois que paramos o programa:
Depurar -> Novo ponto de interrupção -> Novo ponto de interrupção de dados ...
Endereço: & (this-> m_value)
Contagem de bytes: 4 (porque int possui 4 bytes)
Agora, podemos retomar o programa. O depurador irá parar quando o valor for alterado.
Você pode fazer o mesmo com classes herdadas ou classes compostas.
Endereço: & (this-> m_a.m_value)
Se você não souber o número de bytes da variável que deseja inspecionar, poderá usar o operador sizeof.
Por exemplo:
Se você olhar para a "Pilha de chamadas", poderá ver a função que alterou o valor da variável.
fonte
Mude a variável para uma propriedade e adicione um ponto de interrupção no método set. Exemplo:
fonte
Se você estiver usando o WPF, há uma ferramenta incrível: WPF Inspector .
Ele se conecta a um aplicativo WPF e exibe toda a árvore de controles com todas as propriedades, além de permitir que você (entre outras coisas) interrompa qualquer alteração de propriedade.
Mas, infelizmente, não encontrei nenhuma ferramenta que permitisse fazer o mesmo com QUALQUER propriedade ou variável.
fonte
Lembro-me da maneira como você o descreveu usando o Visual Basic 6.0 . No Visual Studio, a única maneira que encontrei até agora é especificando uma condição de ponto de interrupção .
fonte
Clicar com o botão direito do mouse no ponto de interrupção funciona bem para mim (embora na maioria das vezes eu o esteja usando para pontos de interrupção condicionais em valores de variáveis específicos. Mesmo interromper expressões que envolvam um nome de thread funciona muito útil se você estiver tentando detectar problemas de encadeamento).
fonte
Como Peter Mortensen escreveu:
Informação adicional:
Obviamente, o sistema deve saber qual endereço na memória assistir. Então - defina um ponto de interrupção normal para a inicialização de
myVariable
(oumyClass.m_Variable
) - execute o sistema e aguarde até que ele pare nesse ponto de interrupção. - Agora a entrada Menu está ativada e você pode assistir a variável digitando&myVariable
ou a instância digitando&myClass.m_Variable
. Agora os endereços estão bem definidos.Desculpe quando fiz as coisas erradas, explicando uma solução já fornecida. Mas não pude adicionar um comentário, e houve alguns comentários sobre isso.
fonte
Você pode usar um ponto de controle de memória em código não gerenciado. Não tenho certeza se eles estão disponíveis no código gerenciado.
fonte
Você provavelmente pode fazer um uso inteligente da função DebugBreak () .
fonte
myVariable
é usado e armazenar seus valores após o uso em umapreviousValue
variável auxiliar , e chamar DebugBreak () whenmyVariable!=previousValue
; então você saberia entre quais blocos de códigomyVariable
foram alterados. Mas concordo que a solução da AShelly é a melhor.Opcionalmente, você pode sobrecarregar o operador = para a variável e colocar o ponto de interrupção dentro da função sobrecarregada em uma condição específica.
fonte
Atualização em 2019:
Agora isso é oficialmente suportado no Visual Studio 2019 Preview 2 para .Net Core 3.0 ou superior. Obviamente, você pode ter que pensar em possíveis riscos ao usar uma versão Preview do IDE. Eu imagino que em um futuro próximo isso será incluído no Visual Studio oficial.
https://blogs.msdn.microsoft.com/visualstudio/2019/02/12/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/
fonte