Partilhar via


Registrar informações na janela Saída usando tracepoints no Visual Studio

Os pontos de rastreamento permitem que você registre informações na janela Saída sob condições configuráveis sem modificar ou parar seu código. Esse recurso é suportado 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 .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 um a cada 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 de ponto de interrupção .

  1. Para inicializar um tracepoint, clique primeiro na calha à esquerda do número da linha onde você deseja definir o tracepoint.

    Captura de tela mostrando a inicialização do ponto de interrupção no código de exemplo.

  2. Passe o cursor sobre o círculo vermelho e clique no ícone de engrenagem para abrir a janela Configurações do ponto de interrupção .

    Captura de ecrã a mostrar a janela do ponto de interrupção.

  3. Marque a caixa de seleção Ação .

    Captura de ecrã da janela do ponto de interrupção com a Caixa de Ações marcada.

    Observe como o círculo vermelho muda para um diamante, indicando que você mudou de um ponto de interrupção para um ponto de rastreamento.

  4. Introduza a mensagem em que pretende iniciar sessão na caixa de texto Mostrar uma mensagem na Janela de Saída (para obter detalhes, consulte as secções posteriores deste 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.

  5. Se desejar adicionar condições que determinem se sua mensagem será exibida, marque a caixa de seleção Condições .

    Captura de ecrã da janela do ponto de interrupção com a Caixa de Condições marcada.

    Você tem três opções para condições: Expressão condicional, Filtro e Contagem de acertos.

Menu Ações

Este menu permite que você registre uma mensagem na janela Saída. Digite as cadeias de caracteres que você deseja enviar para a caixa de mensagem (sem aspas necessárias). Se você quiser exibir valores de variáveis, certifique-se de colocá-lo em chaves encaracoladas.

Por exemplo, se você quiser exibir o counter valor da variável no console de saída, digite {counter} na caixa de texto da mensagem.

Captura de tela mostrando a mensagem de saída do contador.

Se você clicar em Fechar e, em seguida, depurar o programa (F5), você verá a seguinte saída na janela Saída.

Captura de tela mostrando a mensagem de ações na janela de saída.

Você também pode usar palavras-chave especiais para exibir informações mais específicas. Digite a palavra-chave exatamente como mostrado abaixo (use um "$" na frente de cada palavra-chave e todas as letras maiúsculas para a palavra-chave em si).

Keyword O que é exibido
$ADDRESS Instrução atual
$CALLER Chamando o nome da função
$CALLSTACK Pilha de chamadas
$FUNCTION Nome da função atual
$PID ID do processo
$PNAME Nome do processo
$TID Identificador de Thread
$TNAME Nome do thread
$TICK Contagem de ticks (do Windows GetTickCount)

Menu Condições

As condições permitem-lhe filtrar as mensagens de saída, para que sejam apresentadas apenas em determinados cenários. Existem 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 tracepoint 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 as iterações pares do loop, você pode selecionar a opção for e, em seguida, digite a caixa de i%2 == 0 texto da mensagem.

Captura de tela mostrando que a expressão condicional é verdadeira.

Se desejar imprimir o valor do contador quando a iteração do loop for alterada, selecione a opção for e digite a caixa de i texto da mensagem.

Captura de tela mostrando quando a expressão condicional é alterada.

O comportamento da opção Quando alterado é 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 depois que 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 marcando a caixa de seleção Ativar 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.

Captura de tela mostrando ativar quando um ponto de interrupção é atingido marcado.

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.

Obtenha assistência de IA

Se você tiver o Copilot, poderá obter assistência de IA enquanto cria um ponto de rastreamento. O Copilot oferece sugestões para pontos de interrupção condicionais e pontos de rastreamento específicos para seu código.

Captura de tela do Copilot trabalhando em sugestões de ponto de interrupção condicional.

Para obter mais informações, consulte Depurar com Copilot.

Contagem de acertos

Uma condição de contagem de ocorrências permite que você envie a saída somente depois que a linha de código onde o tracepoint está definido tiver sido executada um número especificado de vezes.

Para contagem de acertos, você pode optar por gerar uma mensagem quando a linha de código onde o tracepoint está definido tiver sido executada um determinado número de vezes. Com base no requisito, ele pode ser igual a, ou é um múltiplo de, ou é maior ou igual ao valor de contagem de acertos especificado. Escolha a opção que melhor se adapta às suas necessidades e digite um valor inteiro no campo (por exemplo, 5) que representa essa iteração de interesse.

Captura de ecrã a mostrar a Contagem de Visitas da Expressão Condicional.

Você também pode remover o ponto de interrupção no primeiro acerto ativando a caixa de seleção Remover ponto de interrupção uma vez atingido.

Captura de tela mostrando Remover ponto de interrupção no primeiro acerto.

Filter

Para uma condição de filtro, especifique para quais dispositivos, processos ou threads a saída é mostrada.

Captura de ecrã a mostrar o Filtro de Expressão Condicional.

Lista de expressões de filtro:

  • MachineName = "nome"
  • ProcessId = valor
  • ProcessName = "nome"
  • 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

Enquanto os tracepoints se destinam a tornar a depuração uma experiência mais limpa e suave. Existem algumas considerações que você deve estar ciente quando se trata de usá-los.

Às vezes, quando você inspeciona uma propriedade ou atributo de um objeto, seu valor pode mudar. Se o valor for alterado durante a inspeção, não será um bug causado pelo recurso de tracepoint em si. No entanto, o uso de tracepoints 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 atualmente para desenvolvimento. Por exemplo, para gerar uma cadeia de caracteres, você não precisa quebrar uma mensagem entre aspas, mesmo que normalmente o faça ao usar Debug.WriteLine() ou console.log(). Além disso, a sintaxe de chave ({ }) para expressões de saída também pode ser diferente da convenção para valores de saída em sua linguagem de desenvolvimento. (No entanto, o conteúdo dentro das chaves ({ }) ainda deve ser escrito usando a sintaxe da sua linguagem de desenvolvimento).

Se você estiver tentando depurar um aplicativo ativo e procurando um recurso semelhante, confira nosso recurso de ponto de log no Depurador de instantâneo. O depurador de instantâneo é uma ferramenta usada para investigar problemas em aplicativos de produção. Os pontos de log também permitem que você envie mensagens para a janela de saída sem ter que modificar o código-fonte e não afetam seu aplicativo em execução. Para obter mais informações, consulte Depurar aplicativo do Azure ao vivo.