Como rastreio e depuração no Visual c#

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
Para obter uma versão do Microsoft Visual Basic .NET do presente artigo, consulte 313417 .
Este artigo refere-se ao espaço de nomes de biblioteca de classes do Microsoft .NET Framework seguintes:
  • System.Diagnostics

NESTA TAREFA

Sumário
Este artigo descreve como utilizar a depuração e as classes de rastreio . 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 de produção. Estas classes são apenas uma parte das funcionalidades instrumentation que estão disponíveis no .NET Framework.

regressar ao início

Requisitos

A lista seguinte descreve o hardware recomendado, software, infra-estrutura de rede e service packs que necessita de:
  • 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 a depuração do programa.

regressar ao início

Descrição técnica


Os passos a Criar uma amostra com a classe de depuração secção 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 da classe de depuração para produzir as mensagens que ajudam a monitorizar a sequência de execução do programa, para detectar as avarias ou para fornecer informações de medição do desempenho. Por predefinição, as mensagens que produz a classe de depuração aparecem na janela de saída do Visual Studio desenvolvimento Ambiente IDE (Integrated).

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

Quando utiliza o método de uma declaração da classe de depuração , a janela resultados 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 Assert . A caixa de diálogo também inclui os seguintes botões de três comando:
  • Abortar: as paragens de aplicação em execução.
  • Repetir: a aplicação entra em modo de depuração.
  • Ignorar: a applicationproceeds.
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 que não seja a janela de resultados. A classe de depuração tem uma colecção com o nome Serviços de escuta , que inclui objectos de escuta .

Cada objecto do 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 escuta recebe quaisquer dados que gera a classe de depuração . Utilize a classe de TextWriterTraceListener para definir objectos do serviço de escuta . Pode especificar o destino de uma classe de TextWriterTraceListener através do respectivo construtor.

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

regressar ao início

Criar uma amostra com a classe de depuração

  1. Inicie o Visual Studio ou Visual c# Express Edition.
  2. Criar um novo projectnamed de aplicação Visual c# consola conInfo. Class1 é criada no Visual Studio .NET. Program.cs é criada no Visual Studio 2005.
  3. Adicione o seguinte espaço de nomes na parte superior em Class1 ou Program.cs.
    using System.Diagnostics;
  4. Para inicializar variáveis para conter 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. Especifique a mensagem que produz a classe como parâmetro do método WriteLine firstinput. Prima a combinação de teclas CTRL + ALT + O para se certificar de que a janela de resultados está visível.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. Para facilitar a leitura, utilize o método de avanço para avançar mensagens subsequentes na janela de saída:
    Debug.Indent();
  7. Para mostrar o conteúdo das variáveis seleccionados, utilize o método de WriteLine do seguinte modo:
    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 de classe de objecto de anexistent. Por exemplo, o código que se segue 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 a saída, pode incluir uma categoria como anoptional, o segundo parâmetro de entrada do método WriteLine . Se especificar uma categoria, o formato da mensagem Outputwindow é "categoria: mensagem." Por exemplo, a primeira linha do thefollowing código apresenta "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 de resultados pode apresentar mensagens apenas se adesignated condição avalia como VERDADEIRO, utilizando o método de WriteLineIf da classe de depuração . A condição para serem avaliados é o parameterof de entrada primeiro o método WriteLineIf . O segundo parâmetro do WriteLineIf é a mensagem que aparece apenas se a condição, a firstparameter avalia como verdadeiro.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
  11. Utilize o método de uma declaração da classe de depuração para que esta janela apresenta a mensagem apenas se aspecified condição avalia 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 de TextWriterTraceListener (tr1) da janela da consola e para um namedOutput.txt de ficheiro de texto (tr2) e, em seguida, adicione cada objecto para a colecção de Serviços de escuta 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, utilize o método de Unindent para remover o avanço para mensagens subsequentes que gera a classede depuração . Quando utiliza o avanço e os métodos de Unindent em conjunto, o leitor pode distinguir a saída como grupo.
    Debug.Unindent();Debug.WriteLine("Debug Information-Product Ending");
  14. Para se certificar de que cada objecto do serviço de escuta recebe todas as suas saídas, chame o método Flush para as memórias intermédias de classe de depuração :
    Debug.Flush();
regressar ao início

Utilizando 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
  • Anular avanço do
  • De asserção
  • Esvaziar
Pode utilizar o rastreio e as classes de depuração separadamente ou em conjunto na mesma aplicação. Num projecto de configuração da solução de depuração, o rastreio e a saída de depuração estão activas. O projecto gera saída a partir de ambas estas classes para todos os objectos do serviço de escuta . No entanto, um projecto de configuração da solução Release apenas gerará saída de uma classe de rastreio . O projecto de configuração da solução de libertaçã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();
regressar ao início

Verificar se funciona

  1. Certifique-se de que a depuração é a actual configuração da solução.
  2. Se a janela do Explorador de soluções estiver notvisible, prima a combinação de teclas CTRL + ALT + L para apresentar a thiswindow.
  3. ConInfocom o botão direito e, em seguida, clique emPropriedades.
  4. No painel da esquerda da página de propriedades conInfo, na pasta deconfiguração , certifique-se de que a seta aponta paraa depuração.

    Nota No Visual c# 2005 e no Visual c# 2005 Express Edition, clique em Debug na página conInfo .
  5. Acima da pasta de configuração , na caixa de lista pendente deconfiguração , clique em Active(Debug) ou de depuraçãoe, em seguida, clique emOK. No Visual c# 2005 e no Visual c# 2005 Express Edition, clique activo (depuração) ou depuração na caixa de lista pendente 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 aparecer a caixa de diálogoFalha de asserção , clique emIgnorar.
  8. Na janela da consola, prima ENTER. O programa shouldfinish e a janela de saída deverão apresentar 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 da consola e o ficheiro de saída devem displaythe 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			
Nota O ficheiro de saída está localizado no mesmo directório que conInfo executável (conInfo.exe). Normalmente, esta é a pasta de \bin onde está armazenada a origem do projecto. Por predefinição, é C:\Documents and Settings \Início de sessão do utilizador\My Documents\Visual studio Projects\conInfo\bin. No Visual c# 2005 e no Visual c# 2005 Express Edition, o ficheiro de saída está localizado na seguinte pasta:
C:\Documents and Settings \Início de sessão do utilizador\My Documents\Visual studio 2005\Projects\conInfo\conInfo\bin\Debug


regressar ao início

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


regressar ao início

Resolução de problemas

  • Se o tipo de configuração da solução é a versão, a saída de classe de depuração é ignorada.
  • Depois de criar uma classe de TextWriterTraceListener para um determinado destino, o TextWriterTraceListener recebe saída 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 TextWriterTraceListener a classe de Serviços de escuta .
  • Se adicionar um objecto de Serviços de escuta para o mesmo destino o rastreio e as classes de depuração , cada linha de saída é duplicada, independentemente se rastreio dedepuração ou 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);         
regressar ao início
Referências
Para mais informações, consulte os seguintes tópicos na documentação da biblioteca de classes do .NET Framework: regressar ao início

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 815788 - Última Revisão: 08/20/2014 02:54: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