Cómo de seguimiento y depuración en Visual C#

Seleccione idioma Seleccione idioma
Id. de artículo: 815788
Para obtener una versión de Microsoft Visual Basic .NET de este artículo, consulte 313417 .
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describe cómo utilizar las clases de seguimiento y de la depuración . Estas clases están disponibles en la Microsoft.NET Framework. Puede utilizar estas clases para proporcionar información sobre el rendimiento de una aplicación durante el desarrollo de la aplicación, o después de la implementación en producción. Estas clases son sólo una parte de las características de instrumentación que están disponibles en el.NET Framework.

Requisitos

La lista siguiente describe el hardware recomendado, software, infraestructura de red y service Pack que necesitan:
  • Microsoft Windows 2000 o Microsoft Windows XP o Microsoft Windows Server 2003
  • Microsoft Visual C#
En este artículo también se supone que está familiarizado con la depuración del programa.

Descripción de la técnica


Los pasos de la Crear un ejemplo con la clase Debug sección mostrará cómo crear una aplicación de consola que utiliza la clase Debug para proporcionar información sobre la ejecución del programa.

Cuando se ejecuta el programa, puede utilizar los métodos de la clase Debug para producir los mensajes que le ayudan a supervisar la secuencia de ejecución del programa, para detectar anomalías, o para proporcionar información de medición del rendimiento. De forma predeterminada, los mensajes que produce la clase Debug aparecen en la ventana de resultados del entorno de desarrollo integrado (IDE) de Visual Studio.

El código de ejemplo utiliza el método WriteLine para producir un mensaje seguido de un terminador de línea. Cuando se utiliza este método para generar un mensaje, cada mensaje aparece en una línea independiente en la ventana resultados.

Cuando se utiliza el método Assert de la clase Debug , la ventana de salida muestra un mensaje sólo si una condición especificada se evalúa como false. El mensaje también aparece en el cuadro de diálogo modal al usuario. El cuadro de diálogo incluye el mensaje, el nombre del proyecto y el número de extracto de Debug.Assert . El cuadro de diálogo también incluye los siguientes botones de tres comando:
  • Anular: la ejecución se detiene aplicaciones.
  • Reintentar: la aplicación entra en modo de depuración.
  • Omitir: la applicationproceeds.
El usuario debe hacer clic en uno de estos botones para que la aplicación pueda continuar.

También puede dirigir la salida de la clase Debug a destinos que no sean de la ventana de resultados. La clase Debug tiene una colección de agentes de escucha que incluye objetos de escucha .

Cada objeto detector supervisa los resultados del depurador y dirige la salida a un destino especificado.

Cada Agente de escucha de la colección de Agente de escucha reciba el resultado que genera la clase Debug . Utilice la clase TextWriterTraceListener para definir objetos de escucha . Puede especificar el destino de una clase TextWriterTraceListener a través de su constructor.

Algunos destinos de salida posibles son las siguientes:
  • La ventana de la consola mediante la propiedad System.Console.Out .
  • Un archivo de texto (.txt) mediante la instrucción System.IO.File.CreateText("FileName.txt") .
Después de crear un objeto TextWriterTraceListener , debe agregar el objeto a la colección Debug.Listeners para recibir los resultados de la depuración.

Crear un ejemplo con la clase Debug

  1. Inicie Visual Studio o Visual C# Express Edition.
  2. Crear un nuevo projectnamed de aplicación de consola de Visual C# conInfo. Se creará Class1 en Visual Studio. Se crea Program.cs en Visual Studio 2005.
  3. Agregar el espacio de nombres siguiente en Class1 o Program.cs.
    using System.Diagnostics;
  4. Para inicializar las variables para que contengan información acerca de conjunto, agregue las siguientes instrucciones de declaración para el método Main :
    string sProdName = "Widget";
    int iUnitQty = 100;
    double dUnitCost = 1.03;
  5. Especificar el mensaje que produce la clase como el parámetro firstinput del método WriteLine . Presione la combinación de teclas CTRL + ALT + O para asegurarse de que está visible la ventana de salida.
    Debug.WriteLine("Debug Information-Product Starting ");
  6. Para mejorar la legibilidad, utilice el método de sangría para aplicar sangría a los mensajes posteriores en la ventana de salida:
    Debug.Indent();
  7. Para mostrar el contenido de las variables seleccionadas, utilice el método WriteLine de la siguiente manera:
    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. También puede utilizar el método WriteLine para mostrar el espacio de nombres y el nombre de clase de objeto anexistent. Por ejemplo, el código siguiente muestra el espacio de nombres System.Xml.XmlDocument en la ventana de salida:
    System.Xml.XmlDocument oxml = new System.Xml.XmlDocument();
    Debug.WriteLine(oxml);
  9. Para organizar el resultado, puede incluir una categoría como anoptional, el segundo parámetro de entrada del método WriteLine . Si se especifica una categoría, es el formato del mensaje Outputwindow "categoría: mensaje." Por ejemplo, la primera línea de siguientes código muestra "campo: el nombre del producto es Widget" en el 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. La ventana de salida puede mostrar mensajes sólo si la condición de adesignated se evalúa como true mediante el método WriteLineIf de la clase Debug . La condición que se evalúa es el primer parameterof de entrada al método WriteLineIf . El segundo parámetro de WriteLineIf es el mensaje que aparece sólo si la condición en el firstparameter se evalúa como true.
    Debug.WriteLineIf(iUnitQty > 50, "This message WILL appear");
    Debug.WriteLineIf(iUnitQty < 50, "This message will NOT appear");
    
  11. Utilice el método Assert de la clase Debug para que la ventana de salida muestra el mensaje sólo si la condición de aspecified se evalúa como false:
    Debug.Assert(dUnitCost > 1, "Message will NOT appear");
    Debug.Assert(dUnitCost < 1, "Message will appear since dUnitcost < 1 is false");
    
  12. Crear los objetos TextWriterTraceListener para la ventana de la consola (tr1) y un namedOutput.txt del archivo de texto (tr2) y, a continuación, agregue cada objeto a la colección de Agentes de escucha de depuración :
    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 mejorar la legibilidad, utilice el método Unindent para quitar la sangría de los mensajes siguientes que genera la claseDebug . Cuando se utiliza el guión y los métodos de Quitar sangría juntos, el lector puede distinguir los resultados como grupo.
    Debug.Unindent();
    Debug.WriteLine("Debug Information-Product Ending");
  14. Para asegurarse de que cada objeto de agente de escucha recibe todos sus resultados, llame al método Flush para los búferes de clase Debug :
    Debug.Flush();

Utilizando la clase

También puede utilizar la clase Trace para generar mensajes de ese monitor, la ejecución de una aplicación. Las clases Trace y Debug comparten la mayoría de los mismos métodos para producir resultados, incluidos los siguientes:
  • WriteLine
  • WriteLineIf
  • Aplicar sangría
  • Quitar sangría
  • Assert
  • Vaciado
Puede utilizar las clases de depuración y la traza por separado o juntas en la misma aplicación. En un proyecto de configuración de soluciones Debug, Trace y Debug de salida están activas. El proyecto genera resultados de ambas clases a todos los objetos de escucha . Sin embargo, un proyecto de configuración de la solución de lanzamiento sólo genera la salida de una clase de seguimiento . El proyecto de la configuración de la solución de lanzamiento pasa por alto cualquier invocación de método de clase Debug .
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();

Comprobar que funciona

  1. Asegúrese de que Debug es la configuración de soluciones actual.
  2. Si la ventana Explorador de soluciones es cara, presione la combinación de teclas CTRL + ALT + L para mostrar thiswindow.
  3. Haga clic en conInfoy, a continuación, haga clic enPropiedades.
  4. En el panel izquierdo de la página de propiedades de conInfo en la carpeta deconfiguración , asegúrese de que la flecha apunta a ladepuración.

    Nota En Visual C# 2005 y en Visual C# 2005 Express Edition, haga clic en Depurar en la página conInfo .
  5. Encima de la carpeta de configuración en el cuadro de lista desplegableconfiguración , haga clic en Active(Debug) o Depurary, a continuación, haga clic enAceptar. En Visual C# 2005 y en Visual C# 2005 Express Edition, haga clic en activa (depurar) o Depurar en el cuadro de lista desplegable de configuración en la página Depurar y, a continuación, haga clic en Guardar en el menú archivo .
  6. Presione CTRL + ALT + O para mostrar la ventana de resultados.
  7. Presione la tecla F5 para ejecutar el código. Cuando aparezca el cuadro de diálogoError de aserción , haga clic enOmitir.
  8. En la ventana de la consola, presione ENTRAR. El acabarde del programa y la ventana de resultados deben mostrar el resultado similar al siguiente
        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. La ventana de la consola y el archivo Output.txt deben visualizar al siguiente 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 El archivo Output.txt se encuentra en el mismo directorio que el ejecutable conInfo (conInfo.exe). Normalmente, se trata de la carpeta \bin, donde se almacena el origen del proyecto. De forma predeterminada, es C:\Documents and Settings\Inicio de sesión de usuario\My Documents\Visual studio Projects\conInfo\bin. En Visual C# 2005 y en Visual C# 2005 Express Edition, el archivo Output.txt se encuentra en la carpeta siguiente:
C:\Documents and Settings\Inicio de sesión de usuario\My Documents\Visual studio 2005\Projects\conInfo\conInfo\bin\Debug


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


Solución de problemas

  • Si es el tipo de configuración de la solución,se omite el resultado de la clase Debug .
  • Después de crear una clase TextWriterTraceListener para un destino determinado, TextWriterTraceListener recibe la salida de la traza y las clases de depuración . Esto ocurre independientemente de que utilice el método Add de la traza o la clase Debug para agregar TextWriterTraceListener a la clase de los agentes de escucha .
  • Si se agrega un objeto de los agentes de escucha para el mismo destino en el seguimiento y las clases de depuración , se duplica cada línea de salida, independientemente de si el seguimiento o ladepuración genera la salida.
             TextWriterTraceListener myWriter = new TextWriterTraceListener(System.Console.Out);
             Debug.Listeners.Add(myWriter);
            
             TextWriterTraceListener myCreator = new TextWriterTraceListener(System.Console.Out);
             Trace.Listeners.Add(myCreator);
             
    

Referencias

Para obtener más información, vea los temas siguientes en la documentación de la biblioteca de clases de.NET Framework:
Trace (clase)
http://msdn2.Microsoft.com/en-us/library/System.Diagnostics.Trace (vs.71).aspx

Debug (clase)
http://msdn2.Microsoft.com/en-us/library/System.Diagnostics.Debug (vs.71).aspx

Propiedades

Id. de artículo: 815788 - Última revisión: lunes, 03 de marzo de 2014 - Versión: 5.0
Palabras clave: 
kbprogramming kbdebug kbnamespace kbhowtomaster kbmt KB815788 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 815788

Enviar comentarios

 

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