Como rastreio e depuração em Visual C#

Traduções de Artigos Traduções de Artigos
Artigo: 815788 - Ver produtos para os quais este artigo se aplica.
Para obter uma Microsoft Visual Basic .NET versão deste artigo, consulte 313417 .
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve como utilizar as classes de rastreio e depuração . Estas classes estão disponíveis no Microsoft .NET Framework. Pode utilizar estas classes para fornecer informações sobre o desempenho de uma aplicação durante o desenvolvimento de aplicações ou após a implementação para produção. Estas classes são apenas uma parte as funcionalidades de instrumentação que estão disponíveis no .NET Framework.

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita:
  • Microsoft Windows 2000 ou Microsoft Windows XP ou Microsoft Windows Server 2003
  • Microsoft Visual C#
Este artigo também pressupõe que está familiarizado com o programa de depuração.

Descrição da técnica


Os passos na secção Create a Sample with the Debug Class demonstram como criar uma aplicação de consola que utiliza a classe de depuração para fornecer informações sobre a execução do programa.

Quando o programa é executado, pode utilizar métodos de classe de depuração para produzir as mensagens que ajudam a monitorizar a sequência de execução do programa, para detectar avarias ou para fornecer informações de medição do desempenho. Por predefinição, as mensagens que produz a classe de depuração são apresentados na janela Output do Visual Studio IDE (Integrated Development Environment).

O código de exemplo utiliza o método WriteLine para produzir uma mensagem que é seguida por um terminador de linha. Quando utiliza este método para produzir uma mensagem, cada mensagem aparece numa linha separada na janela de resultados.

Quando utiliza o método de declaração da classe de depuração , a janela Output apresenta uma mensagem apenas se uma condição especificada for avaliada como FALSO. A mensagem também aparece numa caixa de diálogo modal ao utilizador. A caixa de diálogo inclui a mensagem, o nome do projecto e o número do extracto Debug.Assert . A caixa de diálogo também inclui os seguintes três comandos botões:
  • abortar: A aplicação pára.
  • Repetir: A aplicação entra em modo de depuração.
  • Ignorar: A aplicação funciona.
O utilizador tem de clicar destes botões antes de pode continuar a aplicação.

Também pode direccionar a saída da classe de depuração para destinos seja a janela de resultados. A classe Debug tem uma colecção denominada listeners inclui objectos de serviço de escuta .

Cada objecto de serviço de escuta monitoriza a saída de depuração e direcciona a saída para um destino especificado.

Cada serviço de escuta na colecção de serviço de escuta recebe todas as saídas que gera a classe de depuração . Utilize a classe TextWriterTraceListener para definir objectos serviço de escuta . Pode especificar o destino de uma classe TextWriterTraceListener através do respectivo construtor.

Alguns destinos de saída possíveis incluem:
  • A janela de consola utilizando a propriedade System.Console.Out .
  • Um ficheiro de texto (.txt) utilizando a instrução System.IO.File.CreateText("FileName.txt") .
Depois de criar um objecto TextWriterTraceListener , terá de adicionar o objecto para a colecção Debug.Listeners para receber resultados de depuração.

Criar um exemplo com a classe de depuração

  1. Inicie o Visual Studio ou o Visual C# Express Edition.
  2. Crie um projecto aplicação do Visual C# consola de novo com o nome conInfo . Aula1 é criada no Visual Studio. NET. Program.cs é criada no Visual Studio 2005.
  3. Adicione o espaço de nomes seguinte no início Aula1 ou Program.cs.
    using System.Diagnostics;
  4. Para inicializar variáveis contêm informações sobre um produto, adicione as seguintes instruções de declaração método Main :
    string sProdName = "Widget";
    int iUnitQty = 100;
    double dUnitCost = 1.03;
  5. Especifique a mensagem que produz a classe como o primeiro parâmetro de entrada do método WriteLine . Prima 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 ");
  6. Para facilitar a leitura, utilize o método avanço para avançar mensagens subsequentes na janela de resultados:
    Debug.Indent();
  7. Para apresentar o conteúdo das variáveis seleccionados, utilize o método WriteLine da seguinte forma:
    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. Também pode utilizar o método WriteLine para apresentar o espaço de nomes e o nome da classe para um objecto existente. Por exemplo, o código seguinte apresenta o espaço de nomes System.XML.XmlDocument na janela de saída:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
    Debug.WriteLine(oxml);
  9. Para organizar os resultados, pode incluir um parâmetro de categoria como opcional, a segunda entrada do método WriteLine . Se especificar uma categoria, o formato a saída de janela de mensagem é "categoria: mensagem." Por exemplo, a primeira linha de código seguinte mostra "campo: O nome do produto é widget" in a saída de 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");
  10. A janela de resultados pode apresentar mensagens apenas se uma determinada condição for avaliada como VERDADEIRO utilizando o método WriteLineIf da classe de depuração . A condição a ser avaliada é o primeiro parâmetro de entrada do método WriteLineIf . O segundo parâmetro do WriteLineIf é a mensagem que aparece apenas se a condição do primeiro parâmetro for avaliada como VERDADEIRO.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
    
  11. Utilizar o método de declaração da classe de depuração para que a janela Output apresenta a mensagem apenas se uma condição especificada for avaliada como falso:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");
    Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
    
  12. Criar os objectos TextWriterTraceListener para a janela de consola (tr1) e para um ficheiro de texto denominado Output.txt (tr2) e adicione cada objecto à colecção de Depuração Listeners :
    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, utilize o método Unindent para remover o avanço para mensagens subsequentes que gera a classe de depuração . Quando utiliza o avanço e os métodos Unindent em conjunto, o leitor consegue distinguir o resultado como grupo.
    Debug.Unindent();
    Debug.WriteLine("Debug Information-Product Ending");
  14. Para se certificar de que cada objecto de serviço de escuta recebe todas as respectivas saídas, chamar o método Flush para depuração memórias intermédias de classe:
    Debug.Flush();

Utilizar a classe de rastreio

Também pode utilizar a classe de rastreio para produzir as mensagens que monitorizam a execução de uma aplicação. As classes de rastreio e depuração partilham a maior parte dos mesmos métodos para produzir a saída, incluindo os seguintes:
  • WriteLine
  • WriteLineIf
  • Avançar
  • unindent
  • de asserção
  • Limpar
Pode utilizar o rastreio e as classes de depuração em separado ou em conjunto na mesma aplicação. Num projecto de configuração de solução de depuração, o rastreio e saída de depuração estão activas. O projecto gera resultados partir destas classes para todos os objectos serviço de escuta . No entanto, um projecto de configuração da solução versão gera apenas saída a partir de uma classe de rastreio . O projecto de configuração da solução Release 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 funciona

  1. Certifique-se que a depuração é a actual configuração da solução.
  2. Se a janela Solution Explorer não estiver visível, prima a combinação de teclas CTRL + ALT + L para apresentar esta janela.
  3. Clique com o botão direito do rato conInfo e, em seguida, clique em Propriedades .
  4. No painel esquerdo da página de propriedade conInfo, na pasta de configuração , certifique-se que a seta aponta para a depuração .

    Nota No Visual C# 2005 e no Visual C# 2005 Express Edition, clique em depuração na página conInfo .
  5. Acima da pasta de configuração , na configuração de caixa de listagem pendente clique Active Directory (depuração) ou de depuração e, em seguida, clique em OK . No Visual C# 2005 e no Visual C# 2005 Express Edition, clique em Active Directory (depuração) ou de depuração na caixa de lista pendente de configuração na página de depuração e, em seguida, clique em Guardar no menu ficheiro .
  6. Prima CTRL + ALT + O para apresentar a janela de saída.
  7. Prima a tecla F5 para executar o código. Quando aparece a caixa de diálogo Falha de asserção , clique em Ignorar .
  8. Na janela da consola, prima ENTER. Deve terminar o programa e, a janela de saída deve apresentar o resultado se assemelhe ao 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 de consola e o ficheiro Output.txt devem apresentar o seguinte resultado:
    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			
    
Nota O ficheiro Output.txt está localizado no mesmo directório como conInfo executável (conInfo.exe). Normalmente, esta é a pasta de \bin onde está armazenada a origem do projecto. Por predefinição, esta é C:\Documents and Settings\ User login \My Documents\Visual Projects\conInfo\bin Studio. No Visual C# 2005 e no Visual C# 2005 Express Edition, o ficheiro Output.txt está localizado na seguinte pasta:
C:\Documents and Settings\ User login \My Documents\Visual 2005\Projects\conInfo\conInfo\bin\Debug Studio


Concluir código lista

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


Resolução de problemas

  • Se o tipo de solução de configuração for Release , o resultado de classe de depuração será ignorado.
  • Depois de criar uma classe TextWriterTraceListener para um determinado destino, TextWriterTraceListener recebe resultados de rastreio e as classes de depuração . Isto ocorre independentemente de utilizar o método Add de rastreio ou a classe de depuração para adicionar a classe Listeners TextWriterTraceListener .
  • Se adicionar um objecto listeners para o mesmo destino no rastreio e as classes de depuração , cada linha de saída é duplicada, independentemente de se depuração ou Analisar gera o resultado.
             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 mais informações, consulte os seguintes tópicos no .NET Framework Class Library documentação:
Classe de rastreio
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

Artigo: 815788 - Última revisão: 13 de março de 2008 - Revisão: 4.3
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: 
kbmt kbprogramming kbdebug kbnamespace kbhowtomaster KB815788 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
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