Tracing and Instrumenting Applications (Rastrear e Instrumentalizar Aplicações)
Nota
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 rastreio é uma forma de monitorizar a execução da aplicação enquanto esta ocorre. 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 System.Diagnostics.Traceclasses , System.Diagnostics.Debuge para System.Diagnostics.TraceSource registrar informações sobre erros e execução de aplicativos em logs, arquivos de texto ou outros dispositivos para análise posterior.
O termo instrumentação refere-se à capacidade de monitorizar ou medir o nível de desempenho de um produto e de diagnosticar erros. Na programação, isto significa a capacidade de uma aplicação incorporar:
Rastreamento de código - Receber mensagens informativas sobre a execução de um aplicativo em tempo de execução.
Depuração - Rastreando e corrigindo erros de programação em um aplicativo em desenvolvimento. Para obter mais informações, consulte Depuração.
Contadores de desempenho - Componentes que permitem acompanhar o desempenho do seu aplicativo. Para obter mais informações, consulte Contadores de desempenho.
Logs de eventos - Componentes que permitem receber e rastrear eventos importantes na execução do seu aplicativo. Para obter mais informações, consulte a EventLog classe.
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 algo der 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. O familiar Trace e Debug as classes ainda são amplamente utilizados, mas a TraceSource classe é recomendada para novos comandos de rastreamento, como TraceEvent e TraceData.
As Trace classes e Debug são idênticas, exceto que os Trace procedimentos e funções da classe são compilados por padrão em compilações de versão, mas os Debug da classe não são.
As Trace classes e Debug 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 controlar tipos específicos de ações em um aplicativo implantado à medida que 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 ambiente de desenvolvimento integrado (IDE) 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 exibirá "Hello World!" na janela Saída quando o aplicativo for executado no depurador.
Isso permite que você depure seus aplicativos e otimize seu desempenho com base em seu comportamento em seu ambiente de teste. Você pode depurar seu aplicativo em sua compilação de depuração com o atributo condicional ativado para que você receba toda a Debug saída de depuração. Quando seu aplicativo estiver pronto para lançamento, você poderá compilar sua compilação de versão sem ativar o Debug atributo condicional, para que o compilador não inclua seu 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 Compilando e construindo.
Você também pode rastrear a Trace execução de código em um aplicativo instalado, usando métodos da classe. Ao colocar Opções de Rastreamento em seu código, você pode controlar se o rastreamento ocorre e quão extenso ele é. Isso permite monitorar o status do seu 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 switches 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 opções de rastreamento.
Quando você está desenvolvendo um aplicativo para o qual pretende usar o rastreamento, geralmente inclui mensagens de rastreamento e depuração no código do aplicativo. Quando estiver pronto para implantar o aplicativo, você poderá compilar sua compilação de versão sem ativar o atributo condicional Debug . No entanto, você pode ativar o atributo condicional Trace para que o compilador inclua seu 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 problemas no aplicativo.
Durante o desenvolvimento, todos os métodos de saída de depuração e rastreamento gravam informações na janela Saída no 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 Rastrear ouvintes.
A seguir está uma visã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 opções. Para obter mais informações, consulte Como configurar opções 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 ouvintes 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 Construir 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 de compilador Trace e Debug para o método de linha de comando de compilação. Para obter mais informações, consulte Compilando condicionalmente com rastreamento e depuração. Use isso ao compilar a partir da linha de comando.
Se ocorrer um problema durante o tempo de execução, ative a opção de rastreamento apropriada. 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 coleção determina o Trace.Listeners destino.
Analise as mensagens de rastreamento para identificar e entender o problema no aplicativo.
Instrumentação de rastreamento e aplicativos distribuídos
Quando você cria um aplicativo distribuído, pode achar 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, não é possível 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 interface de usuário com a qual você possa 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 de 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 tempo de execução (por exemplo, tempo de resposta excessivamente lento), você pode determinar a causa provável.
Com instruções de rastreamento, você pode evitar a difícil tarefa de examinar o código-fonte original, modificá-lo, recompilar e tentar produzir o erro em tempo de execução no 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 Trace Statements
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 prováveis de rastreamento sejam adequadamente cobertos. Como os aplicativos que usam rastreamento variam muito, 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 do rastreamento
A saída de rastreamento é coletada por objetos chamados ouvintes. Um ouvinte é um objeto que recebe saída de rastreamento e a grava em um dispositivo de saída (geralmente uma janela, log ou arquivo de texto). Quando um ouvinte de rastreamento é criado, ele normalmente é adicionado à coleção, permitindo que o ouvinte receba toda a Trace.Listeners 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, você não receberá nenhuma mensagem de rastreamento. Para obter mais informações, consulte Ouvintes de rastreamento.
Os seis Debug membros e Trace métodos que gravam informações de rastreamento estã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 é gravada somente se a condição especificada como um argumento na Assert instrução for falsa. |
Fail |
O texto especificado; ou, se nenhum for especificado, a Pilha de Chamadas. |
Write |
O texto especificado. |
WriteIf |
O texto especificado, se a WriteIf condição especificada como argumento na instrução for satisfeita. |
WriteLine |
O texto especificado e um retorno de carro. |
WriteLineIf |
O texto especificado e um retorno de carro, se a condição especificada como um argumento na WriteLineIf instrução for satisfeita. |
Todos os ouvintes da Listeners coleção recebem as mensagens descritas na tabela acima, mas as ações tomadas podem variar dependendo do tipo de ouvinte que recebe a mensagem. Por exemplo, o DefaultTraceListener exibe uma caixa de diálogo de asserção quando recebe uma Fail
notificação ou falha Assert
, mas simplesmente TextWriterTraceListener grava a saída em seu 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 conectar-se a um banco de dados para adicionar mensagens a uma tabela. Todos os ouvintes personalizados devem suportar os seis métodos mencionados acima. Para obter mais informações sobre como criar ouvintes definidos pelo desenvolvedor, consulte TraceListener a referência do .NET Framework.
Os Write
métodos e WriteLine
sempre escrevem o texto que você especificar. Assert
, WriteIf
, e WriteLineIf
exigem um argumento booleano que controle se eles escrevem ou não o texto especificado, eles escrevem o texto especificado somente se a expressão for verdadeira (para WriteIf
e WriteLineIf
), ou falsa (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 a referência do .NET Framework.
Preocupações de 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 mesmo que podem ser exploradas por um programa mal-intencionado. Para obter mais informações, consulte Como compilar condicionalmente com rastreamento e depuração, Compilando e construindo e Como criar, inicializar e configurar opções de rastreamento. A depuração também é configurável por meio dos Serviços de Informações da Internet (IIS).
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 rastreamento e depuração
- Como: Criar, inicializar e configurar opções de rastreamento
- Como: Criar e inicializar fontes de rastreamento
- Como: Usar TraceSource e filtros com ouvintes de rastreamento
- Rastrear ouvintes
- Comutadores de rastreio