Este artigo descreve como usar as classes de
rastreamento e
depuração . Essas classes estão disponíveis no Microsoft .NET Framework. Você pode usar essas classes para fornecer informações sobre o desempenho de um aplicativo durante o desenvolvimento de aplicativo ou após a implantação para produção. Essas classes são apenas uma parte dos recursos de instrumentação que estão disponíveis no .NET Framework.
Requisitos
A lista a seguir descreve o hardware recomendado, software, infra-estrutura de rede e service packs que você precisa:
- Microsoft Windows 2000 ou Microsoft Windows XP ou Microsoft Windows Server 2003
- Microsoft Visual translation from VPE for Csharp
Este artigo também presume que você esteja familiarizado com depuração do programa.
Descrição de técnica
As etapas na seção
Create a
Sample with the Debug Class demonstram como criar um aplicativo de console que usa a classe
Debug para fornecer informações sobre a execução do programa.
Quando o programa é executado, você pode usar métodos da classe
Debug para produzir as mensagens que ajudam você a monitorar a seqüência de execução do programa, para detectar problemas ou para fornecer informações de medição de desempenho. Por padrão, as mensagens que produz a classe
Debug aparecem na janela saída do Visual Studio IDE (ambiente de desenvolvimento integrado).
O código de exemplo usa o método
WriteLine para produzir uma mensagem que é seguida por um terminador de linha. Quando você usa esse método para produzir uma mensagem, cada mensagem é exibida em uma linha separada na janela Output.
Quando você usa o método
Assert da classe
Debug , na janela Output exibe uma mensagem somente se uma condição especificada for avaliada como false. A mensagem também aparece na caixa de diálogo modal ao usuário. A caixa de diálogo inclui a mensagem, o nome do projeto e o número de instrução
Debug.Assert . A caixa de diálogo também inclui os seguintes botões de três comando:
- Anular: O aplicativo pára em execução.
- Repetir: O aplicativo insere um modo de depuração.
- Ignorar: O aplicativo continua.
O usuário deve clicar em um desses botões que o aplicativo possa continuar.
Você também pode direcionar a saída da classe
Debug para destinos diferente na janela Output. A classe
Debug tem uma coleção denominada
ouvintes que inclui objetos de
escuta .
Cada objeto
ouvinte monitora a saída de
depuração e direciona a saída para um destino especificado.
Cada
ouvinte na coleção de
ouvinte recebe qualquer saída que gera a classe
Debug . Use a classe
TextWriterTraceListener para definir objetos de
escuta . Você pode especificar o destino de uma classe
TextWriterTraceListener através de seu construtor.
Alguns destinos de saída possíveis incluem o seguinte:
- A janela de console usando a propriedade System.Console.Out .
- Um arquivo de texto (.txt) usando a instrução System.IO.File.CreateText("FileName.txt") .
Depois de criar um objeto
TextWriterTraceListener , você deve adicionar o objeto à coleção
Debug.Listeners para receber saída de depuração.
Criar um exemplo com a classe de depuração
- Inicie o Visual Studio ou translation from VPE for Csharp Visual Express Edition.
- Crie um novo projeto de Visual translation from VPE for Csharp Console Application chamado conInfo . Class1 é criado no Visual Studio. NET. Program.cs é criado no Visual Studio 2005.
- Adicione o seguinte namespace na parte superior em Class1 ou Program.cs.
using System.Diagnostics;
- Para inicializar variáveis para armazenar informações sobre um produto, adicione as seguintes instruções de declaração ao método Main :
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
- Especifique a mensagem que produz a classe como o primeiro parâmetro de entrada do método WriteLine . Pressione a combinação de teclas CTRL + ALT + O para se certificar que a janela de saída está visível.
Debug.WriteLine("Debug Information-Product Starting "); - Para facilitar a leitura, use o método recuo para recuar mensagens subseqüentes na janela Output:
- Para exibir o conteúdo de variáveis selecionadas, use o método WriteLine da seguinte maneira:
Debug.WriteLine("The product name is " + sProdName);
Debug.WriteLine("The available units on hand are" + iUnitQty.ToString());
Debug.WriteLine("The per unit cost is " + dUnitCost.ToString()); - Você também pode usar o método WriteLine para exibir o espaço para nome e o nome de classe para um objeto existente. Por exemplo, o código a seguir exibe o espaço para nome System.XML.XmlDocument na janela Output:
System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);
- Para organizar a saída, você pode incluir um parâmetro de categoria como um opcional, segundo a entrada do método WriteLine . Se você especificar uma categoria, o formato a saída mensagem em janela é "categoria: mensagem." Por exemplo, a primeira linha de código a seguir exibe "campo: O nome do produto é widget" in a saída janela:
Debug.WriteLine("The product name is " + sProdName,"Field");
Debug.WriteLine("The units on hand are" + iUnitQty,"Field");
Debug.WriteLine("The per unit cost is" + dUnitCost.ToString(),"Field");
Debug.WriteLine("Total Cost is " + (iUnitQty * dUnitCost),"Calc"); - A janela de saída pode exibir mensagens somente se uma condição designada for avaliada como true usando o método WriteLineIf da classe Debug . A condição a ser avaliada é o primeiro parâmetro de entrada do método WriteLineIf . O segundo parâmetro da WriteLineIf é a mensagem será exibida somente se a condição no primeiro parâmetro for avaliada como true.
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
- Use o método Assert da classe Debug para que a janela saída exibe a mensagem somente se uma condição especificada for avaliada como false:
Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
- Crie os objetos TextWriterTraceListener para a janela de console (tr1) e para um arquivo de texto chamado Output.txt (tr2) e adicione cada objeto à coleção Listeners Debug :
TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);
TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
Debug.Listeners.Add(tr2); - Para facilitar a leitura, use o método Unindent para remover o recuo para mensagens subseqüentes que gera a classe Debug . Quando você usa o recuo e os métodos Unindent juntos, o leitor pode distinguir a saída como grupo.
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending"); - Para certificar-se que cada objeto de escuta recebe todas as sua saída, chame o método Flush para os buffers de classe Debug :
Usando a classe de rastreamento
Também pode usar a classe de
rastreamento para produzir mensagens que monitoram a execução de um aplicativo. As classes
Trace e
Debug compartilham a maioria dos métodos mesmos para produzir saída, incluindo o seguinte:
- WriteLine
- WriteLineIf
- Recuar
- Retirar recuo
- declarar
- liberar
Você pode usar classes
Debug e
Trace separadamente ou juntas no mesmo aplicativo. Em um projeto Debug Solution Configuration,
Rastrear e
Depurar saída estão ativas. O projeto gera saída de ambas essas classes para todos os objetos de
escuta . No entanto, um projeto Release Solution Configuration apenas gera saída de uma classe de
rastreamento . O projeto Release Solution Configuration ignora qualquer invocações de método de classe
Debug .
Trace.WriteLine("Trace Information-Product Starting ");
Trace.Indent();
Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");
Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");
Trace.Flush();
Console.ReadLine();
Verificar se ele funciona
- Verifique se Debug é a configuração de solução atual.
- Se a janela do Solution Explorer não estiver visível, pressione a combinação de teclas CTRL + ALT + L para exibir essa janela.
- Clique com o botão direito do mouse conInfo e, em seguida, clique em Propriedades .
- No painel esquerdo da página de propriedade conInfo, sob a pasta configuração , certifique-se que a seta aponta para depuração .
Observação No Visual translation from VPE for Csharp 2005 e no Visual translation from VPE for Csharp 2005 Express Edition, clique em Debug na página conInfo . - Acima da pasta de configuração , na configuração caixa de listagem suspensa clique Active (Debug) ou Depurar e em seguida, clique em OK . No Visual translation from VPE for Csharp 2005 e no Visual translation from VPE for Csharp 2005 Express Edition, clique em Active (Debug) ou a depuração na caixa de listagem drop-down configuração na página Debug e, em seguida, clique em Salvar no menu arquivo .
- Pressione CTRL + ALT + O, para exibir a janela de saída.
- Pressione a tecla F5 para executar o código. Quando a caixa de diálogo Assertion Failed for exibida, clique em Ignorar .
- Na janela do console, pressione ENTER. Deve concluir o programa e a janela de saída deve exibir a saída semelhante à seguinte
Debug Information-Product Starting
The product name is Widget
The available units on hand are100
The per unit cost is 1.03
System.Xml.XmlDocument
Field: The product name is Widget
Field: The units on hand are100
Field: The per unit cost is1.03
Calc: Total Cost is 103
This message WILL appear
---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
Message will appear since dUnitcost < 1 is false
---- Assert Long Message ----
at Class1.Main(String[] args) <%Path%>\class1.cs(34)
The product name is Widget
The available units on hand are100
The per unit cost is 1.03
Debug Information-Product Ending
Trace Information-Product Starting
The product name is Widget
Field: The product name isWidget
This message WILL appear
Trace Information-Product Ending
- A janela de console e o arquivo output.txt devem exibir a seguinte saída:
The product name is Widget
The available units on hand are 100
The per unit cost is 1.03
Debug Information-Product Ending
Trace Information-Product Starting
The product name is Widget
Field: The product name is Widget
This message WILL appear
Trace Information-Product Ending
Observação O arquivo output.txt está localizado no mesmo diretório como conInfo executável (conInfo.exe). Normalmente, isso é a pasta \bin onde a fonte do projeto está armazenada. Por padrão, isso é C:\Documents and Settings\
User
login \Meus Documentos\Visual Studio Projects\conInfo\bin. No Visual translation from VPE for Csharp 2005 e no Visual translation from VPE for Csharp 2005 Express Edition, o arquivo output.txt está localizado na seguinte pasta:
C:\Documents and Settings\ User login \Meus Documentos\Visual Studio 2005\Projects\conInfo\conInfo\bin\Debug
Concluir código listagem
using System;
using System.Diagnostics;
class Class1
{
[STAThread]
static void Main(string[] args)
{
string sProdName = "Widget";
int iUnitQty = 100;
double dUnitCost = 1.03;
Debug.WriteLine("Debug Information-Product Starting ");
Debug.Indent();
Debug.WriteLine("The product name is "+sProdName);
Debug.WriteLine("The available units on hand are"+iUnitQty.ToString());
Debug.WriteLine("The per unit cost is "+ dUnitCost.ToString());
System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
Debug.WriteLine(oxml);
Debug.WriteLine("The product name is "+sProdName,"Field");
Debug.WriteLine("The units on hand are"+iUnitQty,"Field");
Debug.WriteLine("The per unit cost is"+dUnitCost.ToString(),"Field");
Debug.WriteLine("Total Cost is "+(iUnitQty * dUnitCost),"Calc");
Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
Debug.Assert(dUnitCost > 1, "Message will NOT appear");
Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
TextWriterTraceListener tr1 = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(tr1);
TextWriterTraceListener tr2 = new TextWriterTraceListener(System.IO.File.CreateText("Output.txt"));
Debug.Listeners.Add(tr2);
Debug.WriteLine("The product name is "+sProdName);
Debug.WriteLine("The available units on hand are"+iUnitQty);
Debug.WriteLine("The per unit cost is "+dUnitCost);
Debug.Unindent();
Debug.WriteLine("Debug Information-Product Ending");
Debug.Flush();
Trace.WriteLine("Trace Information-Product Starting ");
Trace.Indent();
Trace.WriteLine("The product name is "+sProdName);
Trace.WriteLine("The product name is"+sProdName,"Field" );
Trace.WriteLineIf(iUnitQty > 50, "This message WILL appear");
Trace.Assert(dUnitCost > 1, "Message will NOT appear");
Trace.Unindent();
Trace.WriteLine("Trace Information-Product Ending");
Trace.Flush();
Console.ReadLine();
}
}Solucionar problemas
- Se o tipo de configuração de solução é versão , a saída de classe Debug será ignorada.
- Depois de criar uma classe TextWriterTraceListener para um destino específico, TextWriterTraceListener recebe saída de rastreamento e as classes Debug . Isso ocorre independentemente de você usar o método Add de rastreamento ou a classe Debug para adicionar TextWriterTraceListener à classe Listeners .
- Se você adicionar um objeto Listeners para o mesmo destino em classes Debug e Trace , cada linha de saída é duplicada, independentemente de rastreamento ou depuração gera a saída.
TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
Debug.Listeners.Add(myWriter);
TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
Trace.Listeners.Add(myCreator);