Como trace e debug no Visual C#

Traduções deste artigo Traduções deste artigo
ID do artigo: 815788 - Exibir os produtos aos quais esse artigo se aplica.
Para obter uma versão deste artigo do Microsoft Visual Basic .NET, consulte 313417 .
Expandir tudo | Recolher tudo

Neste artigo

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.

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.

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.

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

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

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.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
                        
    
  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.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 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


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


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

Referências

Para obter mais informações, consulte os seguintes tópicos na documentação da biblioteca de classes do.NET Framework:
Classe de rastreamento
http://msdn2.microsoft.com/en-us/library/System.Diagnostics.Trace (vs.71).aspx

Classe de depuração
http://msdn2.microsoft.com/en-us/library/System.Diagnostics.Debug (vs.71).aspx

Propriedades

ID do artigo: 815788 - Última revisão: quarta-feira, 20 de agosto de 2014 - Revisão: 5.0
A informação contida neste artigo aplica-se a:
  • 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
Palavras-chave: 
kbprogramming kbdebug kbnamespace kbhowtomaster kbmt KB815788 KbMtpt
Tradução automática
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

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com