Você está offline; aguardando reconexão

Como trace e debug no Visual C#

IMPORTANTE: Este artigo foi traduzido pelo software de tradução automática da Microsoft e eventualmente pode ter sido editado pela Microsoft Community através da tecnologia Community Translation Framework (CTF) ou por um tradutor profissional. A Microsoft oferece artigos traduzidos automaticamente por software, por tradutores profissionais e editados pela comunidade para que você tenha acesso a todos os artigos de nossa Base de Conhecimento em diversos idiomas. No entanto, um artigo traduzido pode conter erros de vocabulário, sintaxe e/ou gramática. A Microsoft não é responsável por qualquer inexatidão, erro ou dano causado por qualquer tradução imprecisa do conteúdo ou por seu uso pelos nossos clientes.

Clique aqui para ver a versão em Inglês deste artigo: 815788
Para obter uma versão deste artigo do Microsoft Visual Basic .NET, consulte 313417 .
Sumário
Este artigo descreve como usar as classes Trace e Debug . 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 do aplicativo, ou após a implantação para produção. Essas classes são apenas uma parte dos recursos de instrumentação disponíveis no.NET Framework.

Voltar ao início

Requisitos

A lista seguinte 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 C#
Este artigo também pressupõe que você esteja familiarizado com a depuração do programa.

Voltar ao início

Descrição técnica


As etapas a Criar um exemplo com a classe de depuração seção 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 os métodos da classe Debug para produzir 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 de saída do Visual Studio Integrated Development Environment (IDE).

O código de exemplo usa o método WriteLine para produzir uma mensagem que é seguida por um terminador de linha. Quando você usar esse método para produzir uma mensagem, cada mensagem aparece em uma linha separada na janela de saída.

Quando você usa o método Assert da classe de depuração , a janela Saída 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 Assert . A caixa de diálogo também inclui os seguintes botões de três comando:
  • Anular: as paradas do aplicativo em execução.
  • De repetição: o aplicativo entra em modo de depuração.
  • Ignorar: de applicationproceeds.
O usuário deve clicar em um desses botões para que o aplicativo possa continuar.

Você também pode direcionar a saída da classe de depuração para destinos que não seja a janela de saída. A classe Debug tem uma coleção denominada ouvintes que inclui objetos de ouvinte .

Cada objeto de 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 resultado que gera a classe Debug . Use a classe TextWriterTraceListener para definir objetos de ouvinte . Você pode especificar o destino de uma classe de TextWriterTraceListener por meio 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 de TextWriterTraceListener , você deve adicionar o objeto à coleção Debug.Listeners para receber saída de depuração.

Voltar ao início

Criar um exemplo com a classe de depuração

  1. Inicie o Visual Studio ou o Visual C# Express Edition.
  2. Criar um novo projectnamed de aplicativo de Console do Visual C# conInfo. Class1 é criado no Visual Studio .NET. Program.cs é criado no Visual Studio 2005.
  3. Adicione o namespace a seguir na parte superior em Class1 ou Program.cs.
    using System.Diagnostics;
  4. Para inicializar variáveis para armazenar informações sobre aproduct, adicione as seguintes instruções de declaração para o método Main :
    string sProdName = "Widget";int iUnitQty = 100;double dUnitCost = 1.03;
  5. Especifica a mensagem que a classe produz como o parâmetro firstinput do método WriteLine . Pressione a combinação de teclas CTRL + ALT + O para certificar-se de que a janela de saída está visível.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. Para facilitar a leitura, use o método de Recuo para recuar mensagens subseqüentes na janela de saída:
    Debug.Indent();
  7. 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());
  8. Você também pode usar o método WriteLine para exibir o espaço para nome e o nome da classe de objeto anexistent. Por exemplo, o código a seguir exibe o namespace System.Xml.XmlDocument na janela de saída:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();Debug.WriteLine(oxml);
  9. Para organizar a saída, você pode incluir uma categoria como anoptional, o segundo parâmetro de entrada do método WriteLine . Se você especificar uma categoria, o formato da mensagem Outputwindow é "categoria: mensagem." Por exemplo, a primeira linha do asseguintes código exibe "campo: O nome do produto é Widget" no Outputwindow:
    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");
  10. A janela saída pode exibir mensagens apenas se adesignated condição for avaliada como true, usando o método WriteLineIf da classe de depuração . A condição a ser avaliada é a parameterof de entrada primeiro o método WriteLineIf . O segundo parâmetro do WriteLineIf é a mensagem que será exibida somente se a condição a firstparameter for avaliada como true.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
  11. Use o método Assert da classe de depuração para que a janela Saída exibe a mensagem somente se a condição de aspecified for avaliada como false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
  12. Criar os objetos de TextWriterTraceListener para a janela de Console (tr1) e um arquivo de texto namedOutput.txt (tr2) e, em seguida, adicione cada objeto à coleção Listeners de depuração :
    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);
  13. Para facilitar a leitura, use o método Unindent para remover o recuo de mensagens subseqüentes que gera a classeDebug . Quando você usar os métodos Unindent e Recuar juntos, o leitor pode distinguir a saída como grupo.
    Debug.Unindent();Debug.WriteLine("Debug Information-Product Ending");
  14. Para certificar-se de que cada objeto de ouvinte recebe todas as sua saída, chame o método Flush para os buffers de classe de depuração :
    Debug.Flush();
Voltar ao início

Usando a classe de rastreamento

Você também pode usar o classe Trace para produzir mensagens que monitoram a execução de um aplicativo. As classes Trace e Debug compartilham a maioria dos métodos para produzir a saída, incluindo o seguinte:
  • WriteLine
  • WriteLineIf
  • Recuo
  • Retirar recuo
  • Assert
  • Liberar
Você pode usar o rastreamento e as classes de depuração separadamente ou em conjunto no mesmo aplicativo. Em um projeto de configuração da solução depuração, rastreamento e Depurar saída estão ativas. O projeto gera saída de ambas essas classes para todos os objetos de ouvinte . No entanto, um projeto de configuração da solução versão apenas gera uma saída de uma classe de rastreamento . O projeto de configuração da solução versão ignora qualquer invocações de método de classe de depuração .
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();
Voltar ao início

Verificar se ele funciona

  1. Certifique-se de que a depuração é a configuração de solução atual.
  2. Se a janela Solution Explorer estiver notvisible, pressione a combinação de teclas CTRL + ALT + L para exibir thiswindow.
  3. Clique com o botão conInfoe, em seguida, clique emPropriedades.
  4. No painel esquerdo da página de propriedades conInfo, sob a pasta deconfiguração , certifique-se de que a seta aponta paradepuração.

    Observação: No Visual C# 2005 e do Visual C# 2005 Express Edition, clique em Debug na página conInfo .
  5. Acima da pasta configuração , na caixa de listagem drop-down deconfiguração , clique em Active(Debug) ou Depurare, em seguida, clique emOK. No Visual C# 2005 e do Visual C# 2005 Express Edition, clique ativa (depuração) ou de depuração na caixa de lista suspensa configuração na página Debug e, em seguida, clique em Salvar no menu arquivo .
  6. Pressione CTRL + ALT + DEL para exibir a janela de saída.
  7. Pressione a tecla F5 para executar o código. Quando a caixa de diálogoAssertion Failed for exibida, clique emIgnorar.
  8. Na janela do Console, pressione ENTER. O programa shouldfinish e a janela de saída devem 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.03Debug Information-Product EndingTrace Information-Product Starting     The product name is Widget    Field: The product name isWidget    This message WILL appearTrace Information-Product Ending                    
  9. A janela do Console e o arquivo txt devem displaythe a seguinte saída:
    The product name is Widget    The available units on hand are 100    The per unit cost is 1.03Debug Information-Product EndingTrace Information-Product Starting     The product name is Widget    Field: The product name is Widget    This message WILL appearTrace Information-Product Ending			
Observação: O arquivo txt está localizado na mesma pasta que o executável de conInfo (conInfo.exe). Normalmente, é a pasta \bin onde a fonte do projeto está armazenado. Por padrão, isso é C:\Documents and Settings \Logon de usuárioDocuments\Visual studio Projects\conInfo\bin. No Visual C# 2005 e do Visual C# 2005 Express Edition, o arquivo txt está localizado na seguinte pasta:
C:\Documents and Settings \Logon de usuárioDocuments\Visual studio 2005\Projects\conInfo\conInfo\bin\Debug


Voltar ao início

Listagem de código completa

   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();      }			   }


Voltar ao início

Solução de problemas

  • Se o tipo de configuração de solução é a versão, a saída de depuração de classe será ignorada.
  • Depois de criar uma classe TextWriterTraceListener para um destino específico, TextWriterTraceListener recebe saída de rastreamento e as classes de depuração . Isso ocorre independentemente de você usar o método Add do rastreamento ou a classe Debug para adicionar TextWriterTraceListener à classe de ouvintes .
  • Se você adicionar um objeto de ouvintes para o mesmo destino no rastreamento e as classes de depuração , cada linha de saída é duplicada, independentemente se o rastreamento dedepuração ou 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);         
Voltar ao início
Referências
Para obter mais informações, consulte os seguintes tópicos na documentação da biblioteca de classes do.NET Framework: Voltar ao início

Propriedades

ID do Artigo: 815788 - Última Revisão: 08/20/2014 02:44:00 - Revisão: 5.0

Microsoft Visual C# 2008 Express Edition, Microsoft Visual C# 2005 Express Edition, Microsoft Visual C# 2005, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# .NET 2002 Standard Edition

  • kbprogramming kbdebug kbnamespace kbhowtomaster kbmt KB815788 KbMtpt
Comentários
&t=">