Como definir pontos de interrupção condicionais no Visual Studio?


133

Existe uma maneira fácil de definir pontos de interrupção condicionais no Visual Studio?

Se eu quiser atingir um ponto de interrupção somente quando o valor de uma variável se tornar algo, como posso fazer isso?


11
Observe que a edição Express não possui essa funcionalidade.
Alexei Levenkov

1
Estou usando Expresso 2015 e ele tem a capacidade para pontos de interrupção condicionais
mark.monteiro

1
A edição da comunidade de 2017 também tem pontos de interrupção condicionais
PentiumPro200

Respostas:


174

Defina um ponto de interrupção como de costume. Clique com o botão direito. Clique em Condição.


1
No VS 2015 você precisa para passar o mouse sobre o ponto de interrupção e clique no ícone de engrenagem para condições set
mark.monteiro

Você quer dizer, clique com o botão direito do mouse, defina a condição, obtenha o erro "Condição para um ponto de interrupção falhou" .. não foi?
quer

1
A resposta também deve incluir sintaxe para declarações condicionais ou um link informativo.
Andrew

50

Ao usar o Express edition, você pode tentar o seguinte:

#if DEBUG
    if( fooVariable == true )
        System.Diagnostics.Debugger.Break();
#endif

A declaração if garante que o release build build não estará presente.


3
Isso tem uma grande vantagem de desempenho / economia de tempo. Eu estava percorrendo todo potencial int 'id' em um programa meu (apenas cerca de 3,5 milhões), o que leva apenas alguns segundos. Eu estava tentando usar o ponto de interrupção condicional, mas como não estava em um ramo condicional, diminuiu a velocidade de execução até o ponto em que, após alguns minutos, eu terminava a sessão de depuração. O uso do ponto de interrupção compilado tornou instantâneo.
Goldfish Sandwich

35

O Visual Studio fornece muitas opções para pontos de interrupção condicionais:

Para definir qualquer um desses

  1. Defina um ponto de interrupção.
  2. Clique com o botão direito do mouse sobre o ponto de interrupção e, no menu pop-up, você seleciona uma opção que combina com você.

Essas opções são as seguintes:

  • Você pode definir uma condição, com base na expressão de código fornecida (selecione Condição no menu pop-up). Por exemplo, você pode especificar essa foo == 8ou alguma outra expressão.
  • Você pode ativar os pontos de interrupção depois que eles forem atingidos um certo número de vezes. (selecione Contagem de ocorrências no menu pop-up). Essa é uma opção divertida de jogar, pois você não se limita a quebrar em uma certa contagem de hits, mas também tem opções para outros cenários. Vou deixar para você explorar as possibilidades.
  • Você pode definir filtros na identificação do processo, identificação da linha e nome da máquina (selecione Filtro no menu pop-up)

16

Apenas outra maneira de fazer isso, (ou se você estiver usando express), adicione a condição no código:

if(yourCondition)
{
    System.Diagnostics.Debugger.Break();
}

9
  1. Definir ponto de interrupção na linha
  2. Clik direito na bola vermelha
  3. Escolheu o ponto de interrupção condicional
  4. Condição de instalação

8

Escrever a condição real pode ser a parte complicada, então eu tendem a

  1. Defina um ponto de interrupção regular .
  2. Execute o código até que o ponto de interrupção seja atingido pela primeira vez.
  3. Use a Janela Imediata (Depuração> Windows> Imediata) para testar sua expressão .
  4. Clique com o botão direito do mouse no ponto de interrupção, clique em Condição e cole na sua expressão .

Vantagens de usar a janela Imediata:

  • Possui IntelliSense .
  • Você pode ter certeza de que as variáveis na expressão estão no escopo quando a expressão é avaliada.
  • Você pode ter certeza de que sua expressão retorna verdadeira ou falsa .

Este exemplo é interrompido quando o código está se referindo a uma tabela com o nome "Configuração":

table.GetTableName().Contains("Setting")

5

Crie um ponto de interrupção como faria normalmente, clique com o botão direito do mouse no ponto vermelho e selecione "condição".


4
  1. Defina um ponto de interrupção como de costume
  2. Clique com o botão direito do mouse no ponto de interrupção e selecione Condição
  3. Você verá uma caixa de diálogo que diz "Condição do ponto de interrupção"
  4. Coloque uma condição no campo, por exemplo, "i == 5"

O ponto de interrupção só será atingido quando eu tiver 5 anos.


4
  1. Defina um ponto de interrupção como de costume.
  2. Clique com o botão direito do mouse no marcador de ponto de interrupção
  3. Clique em "Condição ..."
  4. Escreva uma condição, você pode usar nomes de variáveis
  5. Selecione "É verdadeiro" ou "Foi alterado"

4

No Visual Studio 6.0

Alt+ F9!!!


1
-1) Isso não funciona no VS 2012 2) Essa pergunta já tem muitas outras (melhores) respostas e 3) quem se importa com o VS 6.0 (lançado em 1998)? 4) Mesmo se alguém se importa cerca de VS 6, a questão é marcado com .Net que não tem suporte até que a próxima versão do VS (Visual Studio .Net)
Tim Medora

7
Bem, as outras respostas não funcionam no VS 6.0. Então, eu postei uma solução.
Vorac

1

Defina breakpointcomo você faz normalmente, clique com o botão direito do mouse no ponto de interrupção e selecione a condionopção e define sua condição.


1

Crie um ponto de interrupção da função condicional:

  1. Na janela Pontos de interrupção, clique em Novo para criar um novo ponto de interrupção.

  2. Na guia Função, digite Inverter para Função. Digite 1 para Linha, digite 1 para Caractere e defina Idioma como Básico.

  3. Clique em Condição e verifique se a caixa de seleção Condição está marcada. Digite instr.length > 0para Condição, verifique se a opção é verdadeira está selecionada e clique em OK.

  4. Na caixa de diálogo Novo ponto de interrupção, clique em OK.

  5. No menu Debug, clique em Start.


0

Se você veio do Google, esta resposta pode ser o que você está procurando.

  1. Clique em Debug> New BreakPoint> Function Breakpoint insira a descrição da imagem aqui

  2. lá escolha o ponto de interrupção condicional.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.