DetailPage-MSS-KB

Base de Dados de Conhecimento

Artigo: 815787 - Última revisão: sexta-feira, 1 de Junho de 2007 - Revisão: 2.4

 

Nesta página

Sumário

Este artigo descreve como utilizar a classe de depuração e a classe 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 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, Microsoft Windows XP ou Microsoft Windows Server 2003
  • Microsoft Visual C++ .NET ou Microsoft Visual C++ 2005
Este artigo também pressupõe que está familiarizado com a aplicação de depuração.

Descrição técnica utilizando a classe de depuração

Os passos de "Create a Sample That Uses the Debug Class" secção deste artigo demonstram como criar uma aplicação de consola que utiliza a classe de depuração para fornecer informações sobre uma aplicação durante a execução.

Enquanto executa uma aplicação, pode utilizar métodos de classe de depuração para apresentar mensagens que ajudam a controlar a aplicação durante o tempo de execução, para detectar erros ou para fornecer informações de medição do desempenho. Por predefinição, as mensagens que apresenta a classe de depuração são apresentados na janela saída no Visual Studio .NET.

O código de exemplo deste artigo utiliza o método WriteLine para apresentar uma mensagem, seguida de um terminador de linha. Quando utiliza este método para apresentar 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 false . A mensagem também aparece ao utilizador uma caixa de diálogo modal. Esta 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 botões:
  • Abortar : pára a aplicação em execução.
  • Repetir : A aplicação entra em modo de depuração.
  • Ignorar : A aplicação funciona.
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 de depuração contém um conjunto é denominado listeners inclui objectos de serviço de escuta .

Cada objecto de serviço de escuta na colecção listeners recebe saída da classe de depuração e, em seguida, encaminha esta saída para um destino especificado.

Utilize a classe TextWriterTraceListener para definir objectos serviço de escuta . Pode especificar o destino de uma classe TextWriterTraceListener utilizando um construtor adequado.

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 uma classe de depuração .

Criar uma amostra que utiliza a classe de depuração

  1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
  3. No Visual C++ .NET 2002, clique em Projectos do Visual C++ em Project Types e, em seguida, clique em Aplicação C++ gerida em modelos .

    No Visual C++ .NET 2003, clique em Projectos do Visual C++ em Project Types e, em seguida, clique em Aplicação de consola (NET) em modelos .

    Nota No Visual Studio 2005, clique em Visual C++ em Project Types .
  4. Na caixa de texto nome , escreva ConInfo e, em seguida, clique em OK .
  5. No Solution Explorer, faça duplo clique em ConInfo.cpp para visualizar a janela de código.
  6. No ficheiro ConInfo.cpp, adicione as seguintes instruções antes do método _tmain :
    #using <System.Xml.Dll>
    using namespace System::Diagnostics;
    se estiver a utilizar o Visual C++ .NET 2002, adicionar o seguinte código adicional na janela código antes das directivas de utilização :
    #using <System.Dll>	
    #include <tchar.h>
  7. Para inicializar variáveis contêm informações sobre um produto, adicione as seguintes instruções de declaração método _tmain :
    String * sProdName = S"Widget";
    int iUnitQty = 100;
    double  dUnitCost = 1.03;
  8. Pode utilizar diferentes métodos da classe de depuração para apresentar mensagens que controlam a execução de uma aplicação da seguinte forma:
    • Especifique a mensagem para ver como o primeiro parâmetro de entrada do método WriteLine da de class. Debug
      Debug::WriteLine(S"Debug Information-Product Starting ");
    • Para melhor legibilidade, utilizar o método de avanço da classe de depuração para avançar mensagens subsequentes na janela de resultados da seguinte forma:
      Debug::Indent();
    • Para apresentar o conteúdo das variáveis seleccionados, utilize o método WriteLine da classe de depuração da seguinte forma:
      Debug::WriteLine(String::Concat(S"The product name is ", sProdName));
      Debug::WriteLine(String::Concat(S"The available units on hand are ", iUnitQty.ToString()));
      Debug::WriteLine(String::Concat(S"The per unit cost is ", dUnitCost.ToString()));
      Note The Concat method of the String class concatenates two strings.
    • Também pode utilizar o método WriteLine da classe de depuração para apresentar o espaço de nomes e o nome da classe para um objecto. 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);
    • Para formatar a saída, pode incluir um parâmetro de categoria como opcional, a segunda entrada do método WriteLine da classe de depuração . Se especificar uma categoria, o formato da mensagem de janela de saída é o seguinte:
      categoria: mensagem
      Por exemplo, a primeira linha de código seguinte mostra o seguinte
      Campo: O nome do produto é widget
      in a saída de janela:
      Debug::WriteLine(String::Concat(S"The product name is " , sProdName), S"Field");
      Debug::WriteLine(String::Concat(S"The units on hand are ",iUnitQty.ToString()) ,S"Field");
      Debug::WriteLine(String::Concat(S"The per unit cost is ", dUnitCost.ToString()) ,S"Field");
      Debug::WriteLine(String::Concat(S"Total Cost is  ", (iUnitQty * dUnitCost).ToString()),S"Calc");
    • Quando utiliza o método WriteLineIf da classe de depuração , a janela de saída apresenta mensagens apenas se uma determinada condição for avaliada como true . O primeiro parâmetro de entrada do método WriteLineIf é a condição for avaliada. O segundo parâmetro do método WriteLineIf é a mensagem que aparece apenas se a condição do primeiro parâmetro for avaliada como true .
      Debug::WriteLineIf(iUnitQty > 50, S"This message WILL appear");
      Debug::WriteLineIf(iUnitQty < 50, S"This message will NOT appear");
    • Utilizar o método de declaração da classe de depuração para que a janela Output apresenta uma mensagem apenas se uma condição especificada for avaliada como false .
      Debug::Assert(dUnitCost > 1, S"Message will NOT appear");
      Debug::Assert(dUnitCost < 1, S"Message will appear since dUnitcost  < 1 is false");
    • Criar objectos TextWriterTraceListener da janela de consola (tr1) e para um texto de ficheiro que é Output.txt com nome (tr2) e, em seguida, adicionar ambos os objectos à colecção Debug::Listeners .
      TextWriterTraceListener * tr1 = new TextWriterTraceListener(System::Console::Out);
      Debug::Listeners->Add(tr1);
      
      TextWriterTraceListener * tr2 = new TextWriterTraceListener(System::IO::File::CreateText(S"Output.txt"));
      Debug::Listeners->Add(tr2);
    • Para facilitar a leitura, utilize o método Unindent da classe de depuração para remover o avanço para mensagens subsequentes que gera a classe de depuração . Quando utiliza o método de avanço e o método Unindent em conjunto, um leitor pode distinguir o resultado como um grupo.
      Debug::Unindent();
      Debug::WriteLine(S"Debug Information-Product Ending");
    • 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 classe memórias intermédias.
      Debug::Flush();
    Adicione os métodos adequados para o código e em seguida, prima CTRL + SHIFT + B para compilar a aplicação.

Utilizar o rastreio de classe

Também pode utilizar a classe de rastreio para apresentar mensagens que controlam a execução de uma aplicação. A classe de rastreio e a classe Debug contêm métodos semelhantes para apresentar resultados. Estes métodos incluem o seguinte:
  • WriteLine
  • WriteLineIf
  • Avançar
  • unindent
  • de asserção
  • Limpar
Pode utilizar a classe de rastreio e a classe de depuração em separado ou em conjunto na mesma aplicação. Num projecto de configuração de solução de depuração, os resultados de rastreio e saída de depuração estão activas. O projecto gera saída a partir de ambas estas 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 quaisquer chamadas de método de classe de depuração .
Trace::WriteLine(String::Concat(S"The product name is ",sProdName));
Trace::WriteLine(String::Concat(S"The product name is ",sProdName), S"Field" );
Trace::WriteLineIf(iUnitQty > 50, S"This message WILL appear");
Trace::Assert(dUnitCost > 1, S"Message will NOT appear");

Trace::Unindent();
Trace::WriteLine(S"Trace Information-Product Ending");

Trace::Flush();

Console::ReadLine();

Concluir lista de código

#include "stdafx.h"

#using <mscorlib.dll>
//Uncomment following line for Microsoft Visual C++ .NET 2002
//#using <System.Dll>
#using <System.Xml.Dll>
//Uncomment following line for Microsoft Visual C++ .NET 2002
//#include <tchar.h>

using namespace System;
using namespace System::Diagnostics;

// This is the entry point for this application
int _tmain(void)
{
    String * sProdName = S"Widget";
    int iUnitQty = 100;
    double  dUnitCost = 1.03;
    Debug::WriteLine(S"Debug Information-Product Starting ");
    Debug::Indent();
    Debug::WriteLine(String::Concat(S"The product name is ", sProdName));
    Debug::WriteLine(String::Concat(S"The available units on hand are ", iUnitQty.ToString()));
    Debug::WriteLine(String::Concat(S"The per unit cost is ", dUnitCost.ToString()));

    System::Xml::XmlDocument * oxml = new System::Xml::XmlDocument();
    Debug::WriteLine(oxml);

    Debug::WriteLine(String::Concat(S"The product name is " , sProdName), S"Field");
    Debug::WriteLine(String::Concat(S"The units on hand are ",iUnitQty.ToString()) ,S"Field");
    Debug::WriteLine(String::Concat(S"The per unit cost is ", dUnitCost.ToString()) ,S"Field");
    Debug::WriteLine(String::Concat(S"Total Cost is  ", (iUnitQty * dUnitCost).ToString()),S"Calc");

    Debug::WriteLineIf(iUnitQty > 50, S"This message WILL appear");
    Debug::WriteLineIf(iUnitQty < 50, S"This message will NOT appear");

    Debug::Assert(dUnitCost > 1, S"Message will NOT appear");
    Debug::Assert(dUnitCost < 1, S"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(S"Output.txt"));
    Debug::Listeners->Add(tr2);


    Debug::WriteLine(String::Concat(S"The product name is ",sProdName));
    Debug::WriteLine(String::Concat(S"The available units on hand are ",iUnitQty.ToString()));
    Debug::WriteLine(String::Concat(S"The per unit cost is ", dUnitCost.ToString()));
    Debug::Unindent();
    Debug::WriteLine(S"Debug Information-Product Ending");
    Debug::Flush();

    Trace::WriteLine(S"Trace Information-Product Starting ");
    Trace::Indent();

    Trace::WriteLine(String::Concat(S"The product name is ",sProdName));
    Trace::WriteLine(String::Concat(S"The product name is ",sProdName), S"Field" );
    Trace::WriteLineIf(iUnitQty > 50, S"This message WILL appear");
    Trace::Assert(dUnitCost > 1, S"Message will NOT appear");

    Trace::Unindent();
    Trace::WriteLine(S"Trace Information-Product Ending");

    Trace::Flush();

    Console::ReadLine();

    return 0;
}
Nota Tem de adicionar a opção de compilador do suporte de tempo de execução idioma comum (/ clr:oldSyntax) no Visual C++ 2005 a compilação com êxito o anterior exemplo de código. Para adicionar a opção de compilador do suporte de tempo de execução idioma comum no Visual C++ 2005, siga estes passos:
  1. Clique em Project e, em seguida, clique em <ProjectName> propriedades .

    Nota <ProjectName> é um marcador de posição para o nome do projecto.
  2. Expanda Propriedades de configuração e, em seguida, clique em Geral .
  3. Clique para seleccionar Runtime do idioma comum suporte, sintaxe antigo (/ clr:oldSyntax) na definição de projecto Common Language Runtime suporte no painel da direita, clique em Aplicar e, em seguida, clique em OK .
Para obter mais informações sobre o common language runtime suporte a opção do compilador, visite o seguinte Web site da Microsoft:
/ clr (Common Language Runtime compilação)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx (http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx)

Verifique se a aplicação funciona

  1. Certifique-se que o projecto utiliza a solução de depuração configuração. Para o fazer, siga estes passos:
    1. No menu criar , clique em Gestor de configuração .
    2. Clique em Debug na lista de Configuração de solução de Active Directory e, em seguida, clique em Fechar .
  2. Prima CTRL + ALT + O para apresentar a janela de saída.
  3. Prima F5 para iniciar a aplicação no modo de depuração.
  4. Quando aparece a caixa de diálogo Falha de asserção , clique em Ignorar .
  5. Na janela da consola, prima ENTER. Sai da aplicação, e a janela Output apresenta a seguinte saída:
    Debug Information-Product Starting 
        The product name is Widget
        The available units on hand are 100
        The per unit cost is 1.03
        System.Xml.XmlDocument
        Field: The product name is Widget
        Field: The units on hand are 100
        Field: The per unit cost is 1.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 ----
    
        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
    além disso, o ficheiro Output.txt deve conter 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 Repare este resultado quando utiliza o código que é fornecido na secção "Complete Code Listing" deste artigo. O ficheiro Output.txt está localizado no mesmo directório como ficheiros de origem do projecto. Por predefinição, os ficheiros de origem do projecto são armazenados no directório de Studio Projects\ConInfo\ de \My Documents\Visual C:\Documents and Settings\ UserName.

Resolução de problemas

  • Se o tipo de configuração de solução está definido para edição , o resultado de classe de depuração é ignorado.
  • Depois de criar um objecto TextWriterTraceListener para um determinado destino, o objecto TextWriterTraceListener recebe saída da classe de rastreio e da classe de depuração . Este comportamento ocorre independentemente de se utilizar o método Add da classe rastreio ou o método Add da classe de depuração para adicionar o objecto TextWriterTraceListener à colecção listeners .
  • Se adicionar um objecto de serviço de escuta para o mesmo destino na classe de rastreio e na classe de depuração , cada linha de saída aparece duas vezes, independentemente se a classe de depuração ou a classe de rastreio gera o resultado.
    TextWriterTraceListener * mywriter = new TextWriterTraceListener(System::Console::Out);
    Debug::Listeners->Add(mywriter);
    
    TextWriterTraceListener * myCreator = new TextWriterTraceListener(System::Console::Out);
    Debug::Listeners->Add(myCreator);

Referências

Para obter mais informações sobre a classe de rastreio , visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/system.diagnostics.trace(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.diagnostics.trace(vs.71).aspx)
Para obter mais informações sobre a classe de depuração , visite o seguinte site da Web MSDN:
http://msdn2.microsoft.com/en-us/library/system.diagnostics.debug(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.diagnostics.debug(vs.71).aspx)



A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
Palavras-chave: 
kbmt kbprogramming kbdebug kbconsole kbxml kbwindbg kbhowtomaster KB815787 KbMtpt
Tradução automáticaTraduçã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: 815787  (http://support.microsoft.com/kb/815787/en-us/ )
Partilhar
Opções de suporte adicionais
Fóruns de Suporte da Comunidade Microsoft
Contacte-nos directamente
Encontre um parceiro certificado Microsoft
Loja Microsoft