Usar pontos de interrupção no depurador do Visual Studio
- 06/30/2020
- 12 minutos de leitura
-
- M
- g
- j
- v
- g
-
+8
pontos de interrupção são uma das mais importantes técnicas de depuração em seu developer toolbox. Você define pontos de paragem onde quiser parar a execução do depurador. Por exemplo, você pode querer ver o estado das variáveis de código ou olhar para a pilha de chamadas em um determinado ponto de paragem. Se você está tentando resolver um aviso ou problema ao usar breakpoints, consulte os breakpoints de solução de problemas no depurador Visual Studio.
Nota
se conhece a tarefa ou o problema que está a tentar resolver, mas precisa de saber que tipo de ponto de paragem usar, veja FAQ – Encontre a sua funcionalidade de depuração.
- define pontos de paragem no código-fonte
- acções de ponto de paragem e pontos de localização
- condições de ponto de paragem
- criar uma expressão condicional
- Use IDs de objectos em expressões condicionais (apenas C# E F#)
- Definir uma contagem de visitas condição
- define uma condição de filtro
- definir pontos de paragem da função
- Definir um ponto de interrupção função usando um endereço de memória (nativa apenas em C++)
- definir os pontos de paragem dos dados (. net Core 3.0 ou superior)
- Definir pontos de interrupção de dados (C++ nativo apenas)
- gerir os pontos de paragem na janela dos pontos de paragem
- Etiquetas de pontos de paragem
- export and import breakpoints
- definir pontos de paragem a partir das janelas do depurador
- define um ponto de paragem na janela da pilha de chamadas
- definir um ponto de paragem na janela de desmontagem
- Ver também
define pontos de paragem no código-fonte
pode definir um ponto de paragem em qualquer linha de código executável. Por exemplo, no seguinte código C#, você pode definir um ponto de paragem na linha de código com a atribuição variável (int testInt = 1
), o laço for
, ou qualquer código dentro do laço for
. Você não pode definir um ponto de paragem em assinaturas de métodos, declarações para um espaço de nomes ou classe, ou declarações variáveis se não houver nenhuma atribuição e nenhum getter/setter.
para definir um ponto de paragem no código-fonte, clique na margem esquerda ao lado de uma linha de código. Poderá também seleccionar a linha e carregar em F9, seleccionar a depuração > comutar o ponto de paragem ou carregar com o botão direito e seleccionar o ponto de paragem > inserir um ponto de paragem. O ponto de paragem aparece como um ponto vermelho na margem esquerda.
para a maioria das línguas, incluindo C#, o ponto de paragem e as linhas de execução actuais são realçados automaticamente. Para o código c++, poderá activar o realce do ponto de paragem e das linhas actuais se seleccionar a opção ferramentas (ou depuração) > opções > depuração > realçar toda a linha de código para os pontos de paragem e a instrução actual (apenas para C++).
quando depura, a execução pára no ponto de paragem, antes de o código nessa linha ser executado. O símbolo de ponto de paragem mostra uma seta amarela.
no ponto de paragem no exemplo seguinte, o valor de testInt
ainda é 1. Então, o valor não mudou desde que a variável foi inicializada (definido para um valor de 1) porque a declaração em amarelo ainda não foi executada.
quando o depurador pára no ponto de paragem, você pode olhar para o estado actual da aplicação, incluindo valores variáveis e a pilha de chamadas.
Aqui estão algumas instruções gerais para trabalhar com pontos de paragem.
-
o ponto de paragem é uma comutação. Pode carregar nele, carregar em F9 ou usar o Debug > comutar o ponto de paragem para o apagar ou reinserir.
-
para desactivar um ponto de paragem sem o apagar, passe por cima ou carregue com o botão direito e seleccione Desactivar o ponto de paragem. Os pontos de paragem desactivados aparecem como pontos vazios na margem esquerda ou na janela de pontos de paragem. Para activar de novo um ponto de paragem, passe por cima ou carregue com o botão direito e seleccione Activar o ponto de paragem.
-
define as condições e acções, adiciona e edita as legendas ou exporta um ponto de paragem, Carregando com o botão direito nele e seleccionando o comando apropriado, ou pairando sobre ele e seleccionando o ícone de configuração.
acções de ponto de paragem e pontos de localização
um ponto de paragem é um ponto de paragem que imprime uma mensagem para a janela de saída. Um ponto de rastreamento pode agir como uma indicação de rastreamento temporário na linguagem de programação e não pausa a execução do Código. Você cria um ponto de localização, definindo uma acção especial na janela de configuração do ponto de paragem. Para instruções detalhadas, consulte Usar tracepoints no depurador Visual Studio.
condições de ponto de paragem
pode controlar quando e onde um ponto de paragem executa através da definição de condições. A condição pode ser qualquer expressão válida que o depurador reconheça. Para mais informações sobre expressões válidas, veja as expressões no depurador.
para definir uma condição de ponto de paragem:
-
carregue com o botão direito no símbolo do ponto de paragem e seleccione as condições (ou carregue em Alt + F9, C). Ou passar por cima do símbolo de ponto de paragem, seleccione o ícone de configuração e depois seleccione as condições na janela de configuração do ponto de paragem.
Poderá também definir as condições na janela de pontos de paragem se carregar com o botão direito num ponto de paragem e seleccionar a configuração, seleccionando depois as condições.
-
na lista, selecione expressão condicional, Contagem de Hit ou filtro, e defina o valor em conformidade.
-
seleccione Fechar ou carregue em Ctrl+Enter para fechar a janela de configuração do ponto de paragem. Ou, a partir da janela de pontos de paragem, seleccione OK para fechar a janela.
os pontos de paragem com as condições definidas aparecem com um símbolo + nas janelas de código-fonte e pontos de paragem.
criar uma expressão condicional
quando Seleccionar uma expressão condicional, poderá escolher entre duas condições: é verdadeiro ou quando alterado. Escolher é verdadeiro para quebrar quando a expressão está satisfeita, ou quando alterado para quebrar quando o valor da expressão mudou.
no exemplo seguinte, o ponto de paragem só é atingido quando o valor de testInt
é 4:
No exemplo a seguir, o ponto de interrupção é atingido somente quando o valor de testInt
alterações:
Se você definir um ponto de interrupção condição com sintaxe inválida, aparece uma mensagem de aviso. Se indicar uma condição de ponto de paragem com uma sintaxe válida mas semântica inválida, aparece uma mensagem de aviso na primeira vez que o ponto de paragem é atingido. Em qualquer dos casos, o depurador quebra quando atinge o ponto de paragem inválido. O ponto de paragem é ignorado apenas se a condição for válida e for avaliada para false
.
Nota
para o campo quando alterado, o depurador não considera a primeira avaliação da condição como uma mudança, por isso não atinge o ponto de paragem na primeira avaliação.
Use IDs de objectos em expressões condicionais (apenas C# E F#)
há alturas em que você quer observar o comportamento de um objecto específico. Por exemplo, você pode querer descobrir por que um objeto foi inserido em uma coleção mais de uma vez. Em C# E F#, você pode criar IDs de objetos para instâncias específicas de tipos de referência, e usá-los em condições de ponto de paragem. O ID do objeto é gerado pelos serviços de depuração de linguagem comum (CLR) e associado com o objeto.
para criar um ID de Objecto:
-
Defina um ponto de paragem no código em algum lugar após o objecto ter sido criado.
-
Iniciar a depuração, e quando a execução pára no ponto de interrupção, selecione Debug > Windows > Moradores (ou pressione Ctrl + Alt + V, L) para abrir a janela Locals.
Encontre a instância de objecto específica na janela local, carregue com o botão direito e seleccione a opção Make Object ID.
você deve ver um $ mais um número na janela local. Esta é a identificação do objecto.
-
adicione um novo ponto de paragem no ponto que deseja investigar; por exemplo, quando o objecto deve ser adicionado à colecção. Carregue com o botão direito no ponto de paragem e seleccione as condições.
-
Use o ID do objecto no campo de expressão condicional. Por exemplo, se a variável
item
é o objeto a ser adicionado à coleção, Selecione é verdadeiro e digite item == $<n>, onde <n> é o número de identificação do objeto.a execução irá quebrar no ponto em que esse objeto deve ser adicionado à coleção.
para apagar o ID do objecto, carregue com o botão direito na variável da janela local e seleccione Remover o ID do objecto.
Nota:
IDs de objectos criam referências fracas, e não impedem que o objecto seja recolhido no lixo. São válidos apenas para a sessão de depuração actual.
Definir uma contagem de visitas condição
Se você suspeitar que um ciclo no código começa a funcionar incorretamente após um certo número de iterações, você pode definir um ponto de interrupção para interromper a execução depois que o número de acertos, ao invés de ter que prima repetidamente a tecla F5 para chegar a essa iteração.
em condições na janela de configuração do ponto de paragem, seleccione a contagem de pontos de paragem e depois especifique o número de iterações. No exemplo seguinte, o ponto de paragem é definido para bater em todas as outras iterações:
define uma condição de filtro
pode restringir um ponto de paragem ao fogo apenas em dispositivos específicos, ou em processos e linhas especificados.
Sob Condições em que o ponto de Interrupção janela de Configurações, selecione Filtro e, em seguida, introduza um ou mais dos seguintes expressões:
- Nome = “nome”
- ProcessId = valor
- ProcessName = “nome”
- ThreadId = valor
- ThreadName = “nome do”
Coloque valores de seqüência de caracteres entre aspas duplas. Você pode combinar cláusulas usando &
(e), ||
(ou), !
(não), e parênteses.
definir pontos de paragem da função
pode interromper a execução quando uma função é chamada. Isto é útil, por exemplo, quando você conhece o nome da função, mas não a sua localização. Também é útil se você tiver funções com o mesmo nome e quiser quebrar todas elas (tais como funções sobrecarregadas ou funções em diferentes projetos).
para definir um ponto de paragem da função:
-
seleccione a depuração > novo ponto de paragem > Ponto de paragem da função ou carregue em Ctrl + K, B.
pode também seleccionar um novo ponto de paragem de funções > na janela de pontos de paragem.
-
na janela do novo ponto de paragem da função, indique o nome da função no campo do nome da função.
para estreitar a especificação da função:
-
Use o nome da função totalmente qualificado.Exemplo:
Namespace1.ClassX.MethodA()
-
adicionar os tipos de Parâmetros de uma função sobrecarregada.Exemplo:
MethodA(int, string)
-
usa o’!”símbolo para especificar o módulo.Exemplo:
App1.dll!MethodA
-
Use o operador de contexto em C++nativo.
{function, , }
exemplo:
{MethodA, , App1.dll}+2
-
-
na lista de idiomas, escolha a língua da função.
-
selecione OK.
Definir um ponto de interrupção função usando um endereço de memória (nativa apenas em C++)
Você pode usar o endereço de um objeto para definir um ponto de interrupção na função de um método chamado por uma instância específica de uma classe. Por exemplo, dado um objeto endereçável do tipo my_class
, você pode definir um ponto de paragem da função no método my_method
que a instância chama.
-
Defina um ponto de paragem algures após a instância da classe estar instanciada.
-
Encontre o endereço da instância (por exemplo,
0xcccccccc
). -
seleccione a depuração > novo ponto de paragem > Ponto de paragem da função ou carregue em Ctrl + K, B.
-
adicione o seguinte à caixa de Nome da função e seleccione a linguagem C++.
((my_class *) 0xcccccccc)->my_method
definir os pontos de paragem dos dados (. net Core 3.0 ou superior)
dados breakpoints Break execution when a specific object’s property changes.
para definir um ponto de paragem dos dados
-
em um projeto Core. net, iniciar a depuração, e esperar até que um ponto de paragem seja alcançado.
-
na janela Autos, vigia ou locais, carregue com o botão direito numa propriedade e seleccione a opção quebrar quando o valor mudar no menu de contexto.
pontos de paragem de dados no núcleo do. NET não funcionará para:
- Propriedades que não são expansíveis na dica de ferramenta, Locais, Autos, ou Assistir a janela
- variáveis Estáticas
- Classes com o DebuggerTypeProxy Atributo
- Campos dentro de estruturas
Definir pontos de interrupção de dados (C++ nativo apenas)
pontos de interrupção de Dados interromper a execução quando o valor armazenado no endereço de memória especificado alterações. Se o valor é lido, mas não alterado, a execução não quebra.
para definir um ponto de paragem dos dados:
-
em um projeto C++, inicie a depuração e espere até que um ponto de paragem seja alcançado. No menu Depurar, escolha um novo ponto de paragem > Ponto de paragem dos dados.
Poderá também seleccionar o novo ponto de paragem > na janela de pontos de paragem ou carregue com o botão direito num item na Janela Automática, vigia ou local e seleccione a opção quebrar quando o valor mudar no menu de contexto.
-
na caixa de endereços, digite um endereço de memória, ou uma expressão que avalia para um endereço de memória. Por exemplo, tipo
&avar
para quebrar quando o conteúdo da variávelavar
muda. -
na lista de ‘bytes’, seleccione o número de ‘bytes’ que deseja que o depurador veja. Por exemplo, se seleccionar 4, o depurador irá ver os quatro bytes que começam em
&avar
e quebrar se algum desses bytes mudar o valor.
os pontos de paragem dos dados não funcionam nas seguintes condições::
- um processo que não está sendo depurado escreve para o local da memória.A localização da memória é compartilhada entre dois ou mais processos.
- a localização da memória é atualizada dentro do núcleo. Por exemplo, se a memória for passada para a função Windows
ReadFile
de 32 bits, a memória será atualizada a partir do modo kernel, de modo que o depurador não irá quebrar na atualização. - onde a expressão do relógio é maior que 4 bytes em hardware de 32 bits e 8 bytes em hardware de 64 bits. Esta é uma limitação da arquitetura x86.
Nota
-
os pontos de paragem dos dados dependem de endereços de memória específicos. O endereço de uma variável muda de uma sessão de depuração para a seguinte, por isso os pontos de paragem dos dados são automaticamente desactivados no final de cada sessão de depuração.
-
Se você definir uma data de ponto de interrupção em uma variável local, o ponto de interrupção permanece ativado quando a função termina, mas o endereço de memória que não é mais aplicável, portanto, o comportamento do ponto de interrupção é imprevisível. Se definir um ponto de paragem de dados numa variável local, deverá apagar ou desactivar o ponto de paragem antes de a função terminar.
gerir os pontos de paragem na janela dos pontos de paragem
pode usar a janela dos pontos de paragem para ver e gerir todos os pontos de paragem na sua solução. Esta localização centralizada é especialmente útil em uma grande solução, ou para cenários complexos de depuração onde os pontos de paragem são críticos.
na janela dos pontos de paragem, poderá procurar, ordenar, filtrar, activar/desactivar ou remover os pontos de paragem. Você também pode definir condições e ações, ou adicionar uma nova função ou ponto de paragem de dados.
Para abrir a janela de pontos de interrupção, selecione Debug > Windows > pontos de interrupção, ou pressione Ctrl+Alt+B.
Para seleccionar as colunas para exibir a janela de pontos de interrupção, seleccione Mostrar Colunas. Seleccione um cabeçalho de coluna para ordenar a lista de pontos de paragem por essa coluna.
Etiquetas de pontos de paragem
pode usar legendas para ordenar e filtrar a lista de pontos de paragem na janela de pontos de paragem.
- para adicionar uma legenda a um ponto de paragem, carregue com o botão direito no ponto de paragem do código-fonte ou na janela de pontos de paragem e seleccione então editar as legendas. Adicione uma nova legenda ou escolha uma existente, e então selecione OK.
- ordenar a lista de pontos de paragem na janela de pontos de paragem, seleccionando as legendas, condições ou outros cabeçalhos de colunas. Poderá seleccionar as colunas a mostrar se seleccionar a opção Mostrar as colunas na barra de ferramentas.
export and import breakpoints
to save or share the state and location of your breakpoints, you can export or import them.
- para exportar um único ponto de paragem para um ficheiro XML, carregue com o botão direito no ponto de paragem na janela do código-fonte ou pontos de paragem e seleccione Exportar ou exportar os seleccionados. Selecione um local de exportação e, em seguida, selecione Salvar. A localização por omissão é a pasta de solução.
- exportar vários pontos de interrupção na janela de pontos de interrupção, seleccione as caixas ao lado dos pontos de interrupção, ou introduza os critérios de pesquisa no campo de Pesquisa. Seleccione a opção Exportar todos os pontos de paragem que correspondam ao ícone do critério de pesquisa actual e grave o ficheiro.
- para exportar todos os pontos de paragem, deseleccionar todas as caixas e deixar o campo de pesquisa em branco. Seleccione a opção Exportar todos os pontos de paragem que correspondam ao ícone do critério de pesquisa actual e grave o ficheiro.
- para importar pontos de paragem, na janela de pontos de paragem, seleccione os pontos de paragem de importação de um ícone de ficheiro, navegue até à localização do ficheiro XML e seleccione Abrir.
definir pontos de paragem a partir das janelas do depurador
pode também definir pontos de paragem a partir da pilha de chamadas e das janelas do depurador desmontado.
define um ponto de paragem na janela da pilha de chamadas
para quebrar a instrução ou linha para a qual uma função de chamada retorna, você pode definir um ponto de paragem na janela da pilha de chamadas.
para definir um ponto de paragem na janela da pilha de chamadas:
-
para abrir a janela da pilha de chamadas, deverá estar em pausa durante a depuração. Seleccione a depuração > Windows > pilha de chamadas ou carregue em Ctrl+Alt+C.
-
na janela da pilha de chamadas, carregue com o botão direito na função de chamada e seleccione o ponto de paragem > inserir um ponto de paragem ou carregue em F9.
um símbolo de ponto de paragem aparece ao lado do nome de chamada de função na margem esquerda da pilha de chamadas.
o ponto de paragem da pilha de chamadas aparece na janela de pontos de paragem como um endereço, com uma localização de memória que corresponde à próxima instrução executável na função.
o depurador quebra na instrução.
para mais informações sobre a pilha de chamadas, veja como: usar a janela da pilha de chamadas.
para rastrear visualmente os pontos de paragem durante a execução do Código, veja os métodos de mapa na pilha de chamadas durante a depuração.
definir um ponto de paragem na janela de desmontagem
-
para abrir a janela de desmontagem, deve estar em pausa durante a depuração. Seleccione a depuração > Windows > Desmontagem ou carregue em Ctrl+Alt+D.
-
na janela de desmontagem, clique na margem esquerda da instrução em que deseja quebrar. Você também pode selecioná-lo e pressionar F9, ou clique com o botão direito e selecione Breakpoint > inserir Breakpoint.
Ver também
- o Que é depuração?
- Write better C# code using Visual Studio
- First look at debugging
- Troubleshoot breakpoints in The Visual Studio debugger