Qualquer pessoa que já desenvolveu um aplicativo Web usando ASP deve saber como é problemático depurar um aplicativo Web. No ASP, a depuração é dolorosa e geralmente envolve a impressão do valor de uma variável usando o método Response.Write(). Então pergunte-se: quantas vezes você se esqueceu de remover as instruções de depuração antes de implantar seu aplicativo?
Esta situação mudou completamente com o advento dos componentes do .NET Framework. No .NET, você pode rastrear a execução de um aplicativo Web inteiro usando o depurador no Visual Studio .NET ou usando a classe Trace no namespace System.Web.TraceContext. Este artigo demonstra como usar a classe Trace para auxiliar no trabalho de depuração.
Usando a classe Trace
ASP.NET inclui uma classe Trace que ajuda a rastrear o fluxo de informações do aplicativo. Em vez de usar o objeto Response para depuração, agora você pode usar a classe Trace para imprimir informações de depuração.
Para demonstrar seu uso, primeiro construímos um aplicativo Web ASP.NET e colocamos um controle Button e um controle ListBox no WebForm1 padrão (conforme mostrado na Figura 1). Preencha o controle ListBox com três itens e defina sua propriedade AutoPostBack como True.
Figura 1. Preenchendo o WebForm1 padrão |
Neste artigo, desejo rastrear o fluxo de execução do meu aplicativo. Primeiro, ative o rastreamento. A instrução da página deve conter o atributo Trace e seu valor é definido como True (alterar para visualizar o modo de origem HTML), conforme mostrado na Figura 2.
Figura 2. Rastreamento de ativação |
Em seguida, insiro uma instrução Trace no evento de carregamento do formulário para saber se ocorreu postback. O evento PostBack é um dos recursos mais confusos do ASP.NET e geralmente leva ao fracasso dos desenvolvedores que são novos no ASP.NET.
Private Sub Page_Load (remetente ByVal como System.Object, _ ByVal e As System.EventArgs) _ Lida com MyBase.Load 'Coloque aqui o código do usuário para inicializar a página Trace.Write("Página carregada") Se não forPostBack então Trace.Write("Não está em um postback") 'Realizar algumas operações quando ocorrer postbackElse Trace.Write("Em um postback") 'Executa algumas operaçõesEnd If Finalizar sub |
Também gostaria de saber se o postback ocorre quando um item do ListBox é selecionado:
Private Sub ListBox1_SelectedIndexChanged (ByVal remetente como _ Sistema.Objeto, _ ByVal e As System.EventArgs) Alça _ ListBox1.SelectedIndexChanged Trace.Write("Postback da caixa de listagem") Finalizar sub |
Quando o aplicativo ASP.NET acima for executado, a seguinte saída será exibida (mostrada na Figura 3):
Figura 3. Exibindo informações de rastreamento |
Você pode notar que quando o WebForm1 é carregado pela primeira vez, você pode ver as strings "Página carregada" e "Não está em postback". Se você clicar no botão do WebForm1, poderá ver o registro mostrado na Figura 4. Da mesma forma, se o ListBox for clicado, a string "Listbox postback" também será exibida.
Figura 4. Verifique as informações de rastreamento |
A página de rastreamento contém as seguintes seções (nem todas as informações são mostradas na Figura 3):
Seção | Descrição |
Detalhes da solicitação | Descreve informações relacionadas à solicitação, como ID da conversa, codificação e hora da solicitação. |
As informações de rastreamento | contêm detalhes dos aplicativos em execução no momento. As informações de rastreamento são exibidas nesta seção. |
A árvore de controle | exibe informações sobre os controles em uma página e o tamanho dos campos ocultos do Viewstate. |
A coleção Cookie | exibe os cookies definidos pela página e seus valores. |
A coleção de cabeçalhos | exibe informações do cabeçalho HTTP, como comprimento do conteúdo e agente do usuário. |
A coleção Forms | exibe os nomes dos controles em uma página e seus valores. |
Variáveis do Servidor | exibe variáveis de ambiente do lado do servidor. |
Observe que nossas informações de rastreamento aparecem abaixo da “Seção de Informações de Rastreamento”. Se você quiser desativar o rastreamento, basta definir o atributo Trace na diretiva da página como False. Não há necessidade de remover instruções de rastreamento do seu aplicativo, desligar a depuração agora é tão simples quanto definir um valor booleano.
Ativar/desativar o rastreamento é simplesmente uma questão de modificar o valor do atributo Trace na diretiva da página. Você também pode desativar o rastreamento programaticamente usando a classe Trace. Os membros da classe Trace são os seguintes:
A descrição | da propriedade |
IsEnabled | indica se o rastreamento da solicitação atual deve ser ativado. |
TraceMode | define o modo de rastreamento: sortByCategory ou sortByTime. |
Método | Descrição |
Warn | exibe informações de rastreamento em vermelho. |
Escreva | informações de rastreamento. |
Para desativar o rastreamento programaticamente, use a seguinte instrução no evento load do WebForm1:
No nosso caso, as informações de rastreamento não são exibidas de forma destacada, por isso são ocultadas por outras informações de rastreamento. O método Warn() da classe Trace pode imprimir informações de rastreamento em vermelho. Então, em vez de escrever o código assim:
Trace.Write("Página carregada") |
Em vez de:
Trace.Warn("Página carregada") |
A Figura 5 mostra as informações de depuração exibidas em vermelho para o método Warn().
Figura 5. Usando o método Warn() para exibir informações de rastreamento em vermelho |
Classificar informações de rastreamento
Às vezes, colocar várias instruções de rastreamento em um aplicativo pode ficar confuso. O rastreamento será mais fácil se suas informações de rastreamento puderem ser divididas em categorias diferentes. A classe Trace nos permite classificar e classificar informações de rastreamento com base na categoria.
O exemplo a seguir demonstra como agrupar informações de rastreamento por categoria:
Private Sub Page_Load (remetente ByVal como System.Object, _ ByVal e As System.EventArgs) _ Lida com MyBase.Load Trace.TraceMode = TraceMode.SortByCategory 'Coloque aqui o código do usuário para inicializar a página Trace.Warn("Page_Load", "Página carregada") Se não forPostBack então 'Execute algumas operações Trace.Warn("Page_Load", "Not in a postback") Outro Trace.Warn("Page_Load", "Em um postback") Terminar se Finalizar sub
Private Sub ListBox1_SelectedIndexChanged(ByVal remetente _ As System.Object, ByVal e As _ System.EventArgs) Identificadores _ ListBox1.SelectedIndexChanged Trace.Warn("ListBox", "Postback da caixa de listagem") Finalizar sub |
Ao executar este exemplo, serão exibidas as seguintes informações de depuração, agrupadas por categoria (mostradas na Figura 6):
Figura 6. Classificar por categoria |
Vamos analisar o código acima:
Trace.TraceMode = TraceMode.SortByCategory |
A propriedade TraceMode define os modos suportados pelo rastreamento:
· SortByCategory: Classifique as informações de rastreamento de acordo com o tipo.
· SortByTime: Exibe informações de rastreamento de acordo com a ordem de execução.
Como selecionamos o modo de classificação por categoria, a Figura 7 mostra as informações classificadas por categoria.
Trace.Warn("Page_Load", "Página carregada") |
O atributo Warn exibe a mensagem em vermelho. Observe que este é um método sobrecarregado. No exemplo, passamos dois parâmetros. A primeira categoria de entrada (Categoria), o segundo parâmetro é para receber a mensagem (Mensagem).
Além de definir o modo de rastreamento usando a classe Trace, você também pode especificar o modo de rastreamento usando diretivas de página:
<%@ Page Language="vb" Trace="true" TraceMode="SortByCategory" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> |
Rastreamento de aplicativo
A seção final discute o rastreamento de páginas, que rastreia o fluxo de informações de execução em uma página. O ASP.NET também oferece suporte ao rastreamento em nível de aplicativo. O rastreamento em nível de aplicativo é definido no arquivo web.config, na seção de rastreamento:
Para ativar o rastreamento no nível do aplicativo, defina os seguintes valores:
Valor | da propriedade | Descrição |
Enabled | True | Ativa ou desativa o rastreamento no nível do aplicativo. |
requestLimit | 10 | define o número máximo de solicitações a serem rastreadas. |
pageOutput | False | exibe informações de rastreamento no final da página. |
traceMode | sortByTime | método de classificação de informações de rastreamento. |
localOnly | True | define a capacidade de visualizar rastreamentos do navegador em computadores não locais. |
Quando o aplicativo é carregado, as informações de rastreamento não são exibidas na página. Para visualizar informações de rastreamento, precisamos usar o visualizador de rastreamento (trace.axd):
Figura 7. Rastreamento em nível de aplicativo |
A Figura 7 mostra as informações de rastreamento das últimas seis solicitações do aplicativo. Para visualizar detalhes sobre cada solicitação, clique no link "Visualizar detalhes" de cada linha.
Observe que se trace for definido como true no arquivo web.config e como false na diretiva page, o rastreamento será desabilitado.
Resumir
ASP.NET torna a depuração de aplicativos da web muito mais fácil. Agora que você sabe como usar o rastreamento, experimente e veja o quanto ele melhora sua produtividade!