Compartilhar via


Registrar informações na janela Saída usando pontos de rastreamento no Visual Studio

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 .

  1. 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.

    Captura de tela mostrando a Inicialização do Ponto de Interrupção no código de exemplo.

  2. 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 .

    Captura de tela mostrando a Janela de Ponto de Interrupção.

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

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

    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.

  4. 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.

  5. Se você quiser adicionar condições que determinem se sua mensagem é exibida, marque a caixa de seleção Condições .

    Captura de tela 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 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.

Captura de tela mostrando a Mensagem de Saída do Contador.

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

Captura de tela mostrando a Mensagem ações na janela de 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.

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

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.

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

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.

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

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.

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 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.

Captura de tela mostrando a Contagem de Ocorrências de Expressão Condicional.

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.

Captura de tela mostrando Remover ponto de interrupção na primeira ocorrência.

Filter

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

Captura de tela mostrando Filtro de Expressão Condicional.

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.