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.
Observação
Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
O rastreamento é uma maneira de monitorar a execução do aplicativo enquanto ele está em execução. Você pode adicionar instrumentação de rastreamento e depuração ao seu aplicativo .NET Framework ao desenvolvê-lo e pode usar essa instrumentação enquanto estiver desenvolvendo o aplicativo e depois de implantá-lo. Você pode usar as classes System.Diagnostics.Trace, System.Diagnostics.Debug e System.Diagnostics.TraceSource para registrar informações sobre erros e execução do aplicativo em logs, arquivos de texto ou outros dispositivos para análise posterior.
O termo instrumentação refere-se à capacidade de monitorar ou medir o nível de desempenho de um produto e diagnosticar erros. Na programação, isso significa a capacidade de um aplicativo incorporar:
Rastreamento de código – Recebendo mensagens informativas sobre a execução de um aplicativo em runtime.
Depuração – Identificação e correção de erros de programação em um aplicativo em desenvolvimento. Para obter mais informações, consulte Depurando.
Contadores de desempenho – componentes que permitem acompanhar o desempenho do aplicativo. Para obter mais informações, consulte Performance Counters.
Logs de eventos – componentes que permitem que você receba e acompanhe os principais eventos na execução do seu aplicativo. Para obter mais informações, consulte a classe EventLog.
Instrumentar seu aplicativo colocando instruções de rastreamento em locais estratégicos em seu código é especialmente útil para aplicativos distribuídos. Usando instruções de rastreamento, você pode instrumentar um aplicativo não apenas para exibir informações quando as coisas dão errado, mas também para monitorar o desempenho do aplicativo.
A TraceSource classe fornece recursos de rastreamento aprimorados e pode ser usada no lugar dos métodos estáticos das classes mais antigas Trace e Debug de rastreamento. As classes familiares Trace e Debug ainda são amplamente usadas, mas recomenda-se a classe TraceSource para novos comandos de rastreamento, como TraceEvent e TraceData.
As classes Trace e Debug são idênticas, exceto que os procedimentos e funções da classe Trace são compilados por padrão em builds de versão, mas os da classe Debug não são.
As Trace classes e as Debug classes fornecem os meios para monitorar e examinar o desempenho do aplicativo durante o desenvolvimento ou após a implantação. Por exemplo, você pode usar a Trace classe para acompanhar tipos específicos de ações em um aplicativo implantado conforme elas ocorrem (por exemplo, criação de novas conexões de banco de dados) e, portanto, pode monitorar a eficiência do aplicativo.
Rastreamento e depuração de código
Durante o desenvolvimento, você pode usar os métodos de saída da Debug classe para exibir mensagens na janela Saída do IDE (ambiente de desenvolvimento integrado) do Visual Studio. Por exemplo:
Trace.WriteLine("Hello World!")
Debug.WriteLine("Hello World!")
System.Diagnostics.Trace.WriteLine("Hello World!");
System.Diagnostics.Debug.WriteLine("Hello World!");
Cada um desses exemplos mostrará "Olá, Mundo!" na janela de saída quando o aplicativo for executado no depurador.
Isso permite que você depure seus aplicativos e otimize seu desempenho com base no comportamento deles em seu ambiente de teste. É possível depurar o aplicativo no build de depuração com o atributo condicional Debug ativado, de modo que toda a saída de depuração seja recebida. Quando o aplicativo estiver pronto para lançamento, você poderá compilar seu build de versão sem ativar o Debug atributo condicional, para que o compilador não inclua o código de depuração no executável final. Para obter mais informações, consulte Como compilar condicionalmente com rastreamento e depuração. Para obter mais informações sobre diferentes configurações de compilação para seu aplicativo, consulte Compilação e Construção.
Você também pode rastrear a execução de código em um aplicativo instalado, usando métodos da Trace classe. Incluindo Opções de Rastreamento em seu código, você pode controlar se o rastreamento ocorre e qual a sua extensão. Isso permite monitorar o status do aplicativo em um ambiente de produção. Isso é especialmente importante em um aplicativo de negócios que usa vários componentes em execução em vários computadores. Você pode controlar como os comutadores são usados após a implantação por meio do arquivo de configuração. Para obter mais informações, consulte Como criar, inicializar e configurar comutadores de rastreamento.
Ao desenvolver um aplicativo para o qual pretende usar o rastreamento, geralmente você inclui mensagens de rastreamento e depuração no código do aplicativo. Quando estiver pronto para implantar o aplicativo, você poderá compilar sua versão de compilação sem ativar o atributo condicional Debug. No entanto, você pode ativar o atributo condicional Rastreamento para que o compilador inclua o código de rastreamento no executável. Para obter mais informações, consulte Como compilar condicionalmente com rastreamento e depuração.
Fases do rastreamento de código
Há três fases de rastreamento de código:
Instrumentação – você adiciona código de rastreamento ao seu aplicativo.
Rastreamento – o código de rastreamento grava informações no destino especificado.
Análise – você avalia as informações de rastreamento para identificar e entender os problemas no aplicativo.
Durante o desenvolvimento, todos os métodos de saída de depuração e rastreamento gravam informações na janela de Saída do Visual Studio por padrão. Em um aplicativo implantado, os métodos gravam informações de rastreamento nos destinos especificados. Para obter mais informações sobre como especificar um destino de saída para rastreamento ou depuração, consulte Ouvintes de Rastreamento.
Veja a seguir uma exibição geral das principais etapas normalmente envolvidas no uso do rastreamento para analisar e corrigir possíveis problemas em aplicativos implantados. Para obter mais informações sobre como executar essas etapas, consulte o link apropriado.
Para usar o rastreamento em um aplicativo
Considere qual saída de rastreamento você desejará receber no local depois de implantar o aplicativo.
Crie um conjunto de comutadores. Para obter mais informações, consulte Como: Configurar Comutadores de Rastreamento.
Adicione as instruções de rastreamento ao código do aplicativo.
Determine onde você deseja que a saída de rastreamento apareça e adicione os ouvintes apropriados. Para obter mais informações, consulte Criando e inicializando escutadores de rastreamento.
Teste e depure seu aplicativo e o código de rastreamento que ele contém.
Compile o aplicativo em código executável usando um dos seguintes procedimentos:
Use o menu Compilar junto com a página Depurar da caixa de diálogo Páginas de Propriedades no Gerenciador de Soluções. Use isso ao compilar no Visual Studio.
- ou -
Use as diretivas do compilador Trace e Debug para o método de linha de comando de compilação. Para obter mais informações, consulte Compilar Condicionalmente com Trace e Debug. Use isso ao compilar a partir da linha de comando.
Se ocorrer um problema durante o tempo de execução, ative o interruptor de rastreamento apropriado. Para obter mais informações, consulte Configurando opções de rastreamento.
O código de rastreamento grava mensagens de rastreamento em um destino especificado, por exemplo, uma tela, um arquivo de texto ou um log de eventos. O tipo de ouvinte incluído na Trace.Listeners coleção determina o alvo.
Analise as mensagens de rastreamento para identificar e entender o problema no aplicativo.
Instrumentação de rastreamento e aplicativos distribuídos
Ao criar um aplicativo distribuído, talvez seja difícil testar o aplicativo da maneira como ele será usado. Poucas equipes de desenvolvimento têm a capacidade de testar todas as combinações possíveis de sistemas operacionais ou navegadores da Web (incluindo todas as opções de idioma localizado) ou simular o alto número de usuários que acessarão o aplicativo ao mesmo tempo. Nessas circunstâncias, você não pode testar como um aplicativo distribuído responderá a grandes volumes, configurações diferentes e comportamentos exclusivos do usuário final. Além disso, muitas partes de um aplicativo distribuído não têm nenhuma interface do usuário com a qual você pode interagir diretamente ou exibir a atividade dessas partes.
No entanto, você pode compensar isso permitindo que aplicativos distribuídos descrevam determinados eventos de interesse para os administradores do sistema, especialmente coisas que dão errado, instrumentando o aplicativo, ou seja, colocando instruções de rastreamento em locais estratégicos em seu código. Em seguida, se algo inesperado ocorrer em runtime (por exemplo, tempo de resposta excessivamente lento), você poderá determinar a causa provável.
Com comandos de rastreamento, você pode evitar a difícil tarefa de examinar o código-fonte original, modificá-lo, recompilar e tentar gerar o erro de tempo de execução dentro do ambiente de depuração. Lembre-se de que você pode instrumentar um aplicativo não apenas para exibir erros, mas também para monitorar o desempenho.
Posicionamento estratégico de instruções de rastreamento
Você deve ter cuidado especial ao colocar suas instruções de rastreamento para uso durante o tempo de execução. Você deve considerar quais informações de rastreamento provavelmente serão necessárias em um aplicativo implantado, para que todos os cenários de rastreamento prováveis sejam cobertos adequadamente. Como os aplicativos que usam o rastreamento variam amplamente, no entanto, não há diretrizes gerais para o posicionamento estratégico do rastreamento. Para obter mais informações sobre como colocar instruções de rastreamento, consulte Como adicionar instruções de rastreamento ao código do aplicativo.
Saída de rastreamento
A saída de rastreamento é coletada por objetos chamados ouvintes. Um ouvinte é um objeto que recebe a saída de rastreamento e grava essa informação em um dispositivo de saída (geralmente uma janela, log ou arquivo de texto). Quando um ouvinte de rastreamento é criado, normalmente, ele é adicionado à coleção Trace.Listeners, permitindo que o ouvinte receba toda a saída de rastreamento.
As informações de rastreamento são sempre gravadas pelo menos no destino de saída padrão Trace , o DefaultTraceListener. Se, por algum motivo, você tiver excluído o DefaultTraceListener sem adicionar outros ouvintes à Listeners coleção, não receberá nenhuma mensagem de rastreamento. Para obter mais informações, consulte Trace Listeners.
Os seis membros Debug e métodos Trace que gravam informações de rastreamento são listados na tabela a seguir.
| Método | Saída |
|---|---|
Assert |
O texto especificado; ou, se nenhum for especificado, a Pilha de Chamadas. A saída só é gravada se a condição especificada como argumento na instrução Assert for false. |
Fail |
O texto especificado; ou, se nenhum for especificado, a Pilha de Chamadas. |
Write |
O texto especificado. |
WriteIf |
O texto especificado será exibido se a condição, apresentada em forma de argumento na declaração WriteIf, for atendida. |
WriteLine |
O texto especificado e um retorno de carro. |
WriteLineIf |
O texto especificado e um retorno de carro, se a condição especificada como argumento na instrução WriteLineIf for atendida. |
Todos os ouvintes da Listeners coleção recebem as mensagens descritas na tabela acima, mas as ações executadas podem variar dependendo do tipo de ouvinte que recebe a mensagem. Por exemplo, DefaultTraceListener exibe uma caixa de diálogo de declaração quando recebe uma notificação Fail ou Assert com falha, mas um TextWriterTraceListener apenas grava a saída no fluxo.
Você pode produzir resultados personalizados implementando seu próprio ouvinte. Um ouvinte de rastreamento personalizado pode, por exemplo, exibir as mensagens em uma caixa de mensagem ou se conectar a um banco de dados para adicionar mensagens a uma tabela. Todos os ouvintes personalizados devem dar suporte aos seis métodos mencionados acima. Para obter mais informações sobre como criar ouvintes definidos pelo desenvolvedor, consulte TraceListener na referência do .NET Framework.
Os métodos Write e WriteLine sempre escrevem o texto que você especificar.
Assert, WriteIfe WriteLineIf exigem um argumento booliano que controla se eles gravam ou não o texto especificado; eles gravam o texto especificado somente se a expressão for true (for WriteIf e WriteLineIf), ou false (para Assert). O Fail método sempre grava o texto especificado. Para obter mais informações, consulte Como adicionar instruções de rastreamento ao código do aplicativo e à referência do .NET Framework.
Preocupações com a segurança
Se você não desabilitar o rastreamento e a depuração antes de implantar um aplicativo ASP.NET, seu aplicativo poderá revelar informações sobre si mesma que podem ser exploradas por um programa mal-intencionado. Para obter mais informações, consulte Como: Compilar Condicionalmente com Rastreamento e Depuração, Compilação e Construção, e Como: Criar, Inicializar e Configurar Comutadores de Rastreamento. A depuração também é configurável por meio do IIS (Serviços de Informações da Internet).
Consulte também
- Trace
- TraceSource
- Contratos de código
- Tipos de projeto C#, F#e Visual Basic
- Como adicionar instruções de rastreamento ao código do aplicativo
- Como compilar condicionalmente com Trace e Debug
- Como criar, inicializar e configurar comutadores de rastreamento
- Como criar e inicializar fontes de rastreamento
- Como: usar TraceSource e filtros com ouvintes de rastreamento
- Ouvintes de rastreamento
- Opções de rastreamento