Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Os pontos de rastreamento permitem que você registre informações na janela Saída em condições configuráveis sem modificar ou interromper seu código. Esse recurso tem suporte para linguagens gerenciadas (C#, Visual Basic, F#) e código nativo, bem como linguagens como JavaScript e Python.
Observação
Para obter informações sobre como registrar informações na janela Saída programaticamente usando APIs do .NET, consulte Enviar mensagens para a janela Saída.
Vamos dar um exemplo
O programa de exemplo a seguir é um loop simples for com uma variável de contador que aumenta uma vez que o loop executa outra iteração.
using System.Diagnostics;
namespace Tracepoints
{
public class Program
{
public static void Main(string[] args)
{
int counter = 0;
for (int i=0; i<=10; i++)
{
counter +=1;
}
}
}
}
Definir pontos de rastreamento no código-fonte
Você pode definir pontos de rastreamento especificando uma cadeia de caracteres de saída na caixa de seleção Ação na janela Configurações do Ponto de Interrupção .
Para inicializar um ponto de rastreamento, primeiro clique na sarjeta à esquerda do número de linha em que você deseja definir o ponto de rastreamento.
Passe o mouse sobre o círculo vermelho e clique no ícone de engrenagem para abrir a janela Configurações do Ponto de Interrupção .
Marque a caixa de seleção Ação .
Observe como o círculo vermelho é alterado para um diamante indicando que você alternou de um ponto de interrupção para um ponto de rastreamento.
Insira a mensagem que você deseja fazer logon na caixa de texto Mostrar uma mensagem na Janela de Saída (para obter detalhes, consulte seções posteriores neste artigo).
Seu ponto de rastreamento agora está definido. Pressione o botão "Fechar" se tudo o que você deseja fazer é registrar algumas informações na Janela de Saída.
Se você quiser adicionar condições que determinem se sua mensagem é exibida, marque a caixa de seleção Condições .
Você tem três opções para condições: Expressão Condicional, Filtro e Contagem de Ocorrências.
Menu Ações
Esse menu permite que você registre uma mensagem na janela Saída. Digite as cadeias de caracteres que você deseja produzir na caixa de mensagem (sem aspas necessárias). Se você quiser exibir valores de variáveis, coloque-o entre chaves.
Por exemplo, se você quiser exibir o valor da counter variável no console de saída, digite {counter} na caixa de texto da mensagem.
Se você clicar em Fechar e depurar o programa (F5), verá a saída a seguir na janela Saída.
Você também pode usar palavras-chave especiais para exibir informações mais específicas. Insira a palavra-chave exatamente conforme mostrado abaixo (use um "$" na frente de cada palavra-chave e todas as tampas para a própria palavra-chave).
| Keyword | O que é exibido |
|---|---|
$ADDRESS |
Instrução atual |
$CALLER |
Nome da função de chamada |
$CALLSTACK |
Pilha de chamadas |
$FUNCTION |
Nome da função atual |
$PID |
ID do Processo |
$PNAME |
Nome do processo |
$TID |
ID do Tópico |
$TNAME |
Nome do thread |
$TICK |
Contagem de tiques (do Windows GetTickCount) |
Menu condições
As condições permitem que você filtre suas mensagens de saída, para que elas sejam exibidas somente em determinados cenários. Há três tipos principais de condições disponíveis para você.
Expressão condicional
Para uma expressão condicional, uma mensagem de saída é exibida somente quando determinadas condições são atendidas.
Para expressões condicionais, você pode definir o ponto de rastreamento para gerar uma mensagem quando uma determinada condição for verdadeira ou quando ela for alterada. Por exemplo, se você quiser exibir apenas o valor do contador durante até mesmo iterações do for loop, poderá selecionar a opção É verdadeiro e, em seguida, digitar i%2 == 0 na caixa de texto da mensagem.
Se você quiser imprimir o valor do contador quando a iteração do for loop for alterada, selecione a opção Quando alterado e digite i na caixa de texto da mensagem.
O comportamento da opção When changed é diferente para diferentes linguagens de programação.
- Para código nativo, o depurador não considera a primeira avaliação da condição como uma alteração, portanto, não atinge o ponto de rastreamento na primeira avaliação.
- Para código gerenciado, o depurador atinge o ponto de rastreamento na primeira avaliação após Quando alterado é selecionado.
Você também pode definir a condição quando o ponto de rastreamento pode ser habilitado inserindo um Ponto de Interrupção em qualquer seção específica do código e selecionando a caixa de seleção Habilitar somente quando o seguinte ponto de interrupção for atingido: opção no menu Configurações do Ponto de Interrupção . Você pode escolher qualquer ponto de interrupção na lista de opções.
Para obter uma visão mais abrangente das expressões válidas que você pode usar ao definir condições, consulte Expressões no depurador.
Obter assistência de IA
Se você tiver o Copilot, poderá obter assistência de IA enquanto estiver criando um ponto de rastreamento. O Copilot oferece sugestões de pontos de interrupção condicionais e pontos de rastreamento específicos ao seu código.
Para obter mais informações, consulte Depurar com Copilot.
Contagem de ocorrências
Uma condição de contagem de ocorrências permite que você envie a saída somente após a linha de código em que o ponto de rastreamento está definido executou um número especificado de vezes.
Para contagem de ocorrências, você pode optar por gerar uma mensagem quando a linha de código em que o ponto de rastreamento está definido tiver sido executada um número específico de vezes. Com base no requisito, ele pode ser igual a, ou é um múltiplo ou é maior ou igual ao valor de contagem de ocorrências especificado. Escolha a opção que melhor atende às suas necessidades e digite um valor inteiro no campo (por exemplo, 5) que representa essa iteração de interesse.
Você também pode remover o ponto de interrupção no primeiro clique, habilitando a caixa de seleção Remover ponto de interrupção uma vez atingido.
Filter
Para uma condição de filtro, especifique para quais dispositivos, processos ou threads a saída é mostrada.
Lista de expressões de filtro:
-
MachineName= "nome" -
ProcessId= valor -
ProcessName= "name" -
ThreadId= valor -
ThreadName= "nome"
Coloque cadeias de caracteres (como nomes) entre aspas duplas. Os valores podem ser inseridos sem aspas. Você pode combinar cláusulas usando & (AND), || (OR) (!) NOT e parênteses.
Considerações
Embora os pontos de rastreamento se destinem a tornar a depuração uma experiência mais limpa e mais suave. Há algumas considerações que você deve estar ciente quando se trata de usá-las.
Às vezes, quando você inspeciona uma propriedade ou atributo de um objeto, seu valor pode ser alterado. Se o valor for alterado durante a inspeção, não será um bug causado pelo próprio recurso do ponto de rastreamento. No entanto, o uso de pontos de rastreamento para inspecionar objetos não evita essas modificações acidentais.
A maneira como as expressões são avaliadas na caixa de mensagem Ação pode ser diferente da linguagem que você está usando no momento para desenvolvimento. Por exemplo, para gerar uma cadeia de caracteres, você não precisa encapsular uma mensagem entre aspas, mesmo que normalmente use Debug.WriteLine() ou console.log(). Além disso, a sintaxe de chaves ({ }) para expressões de saída também pode ser diferente da convenção para gerar valores em sua linguagem de desenvolvimento. (No entanto, o conteúdo dentro das chaves ({ }) ainda deve ser escrito usando a sintaxe da linguagem de desenvolvimento).
Se você estiver tentando depurar um aplicativo dinâmico e procurando um recurso semelhante, confira nosso recurso de ponto de log no Depurador de Instantâneos. O depurador de instantâneo é uma ferramenta usada para investigar problemas em aplicativos de produção. Os logpoints também permitem que você envie mensagens para a Janela de Saída sem precisar modificar o código-fonte e não afete seu aplicativo em execução. Para obter mais informações, consulte Depurar aplicativo do Azure dinâmico.