Traza e instrumentación de aplicacionesTracing and Instrumenting Applications

El seguimiento es una manera de supervisar la ejecución de la aplicación mientras se está ejecutando.Tracing is a way for you to monitor the execution of your application while it is running. Puede agregar instrumentación de seguimiento y de depuración a la aplicación de .NET Framework cuando la desarrolle, y puede usar dicha instrumentación mientras desarrolla la aplicación y después de implementarla.You can add tracing and debugging instrumentation to your .NET Framework application when you develop it, and you can use that instrumentation both while you are developing the application and after you have deployed it. Puede usar las clases System.Diagnostics.Trace, System.Diagnostics.Debug y System.Diagnostics.TraceSource para registrar información sobre errores y ejecución de la aplicación en registros, archivos de texto u otros dispositivos para su análisis posterior.You can use the System.Diagnostics.Trace, System.Diagnostics.Debug, and System.Diagnostics.TraceSource classes to record information about errors and application execution in logs, text files, or other devices for later analysis.

El término instrumentación hace referencia a la capacidad de supervisar o medir el nivel de rendimiento de un producto y diagnosticar errores.The term instrumentation refers to an ability to monitor or measure the level of a product's performance and to diagnose errors. En programación, esto significa la capacidad de una aplicación para incorporar:In programming, this means the ability of an application to incorporate:

  • Seguimiento de código: recibir mensajes informativos sobre la ejecución de una aplicación en tiempo de ejecución.Code tracing - Receiving informative messages about the execution of an application at run time.

  • Depuración: localizar y corregir errores de programación en una aplicación en desarrollo.Debugging - Tracking down and fixing programming errors in an application under development. Para más información, vea Depuración.For more information, see Debugging.

  • Contadores de rendimiento: componentes que permiten realizar el seguimiento del rendimiento de la aplicación.Performance counters - Components that allow you to track the performance of your application. Para más información, consulte Performance Counters.For more information, see Performance Counters.

  • Registros de eventos: componentes que permiten recibir y realizar el seguimiento de eventos importantes en la ejecución de la aplicación.Event logs - Components that allow you receive and track major events in the execution of your application. Para obtener más información, vea la clase EventLog.For more information, see the EventLog class.

La instrumentación de la aplicación mediante la colocación de instrucciones de seguimiento en puntos estratégicos del código resulta especialmente útil con aplicaciones distribuidas.Instrumenting your application by placing trace statements at strategic locations in your code is especially useful for distributed applications. Mediante el uso de instrucciones de seguimiento, puede instrumentar una aplicación no solo para mostrar información cuando existe algún problema, sino también para supervisar el rendimiento de la aplicación.By using trace statements you can instrument an application not only to display information when things go wrong, but also to monitor how well the application is performing.

La clase TraceSource proporciona características mejoradas de seguimiento y puede usarse en lugar de los métodos estáticos de las clases anteriores de seguimiento Trace y Debug.The TraceSource class provides enhanced tracing features and can be used in place of the static methods of the older Trace and Debug tracing classes. Las ya conocidas clases Trace y Debug se siguen usando ampliamente, pero la clase TraceSource se recomienda para nuevos comandos de seguimiento, como TraceEvent y TraceData.The familiar Trace and Debug classes are still widely used, but the TraceSource class is recommended for new tracing commands, such as TraceEvent and TraceData.

Las clases Trace y Debug son idénticas, salvo que los procedimientos y funciones de la clase Trace se compilan de forma predeterminada en las versiones de lanzamiento, a diferencia de los de la clase Debug.The Trace and Debug classes are identical, except that procedures and functions of the Trace class are compiled by default into release builds, but those of the Debug class are not.

Las clases Trace y Debug proporcionan los medios para supervisar y examinar el rendimiento de la aplicación durante el desarrollo o después de la implementación.The Trace and Debug classes provide the means to monitor and examine application performance either during development or after deployment. Por ejemplo, puede usar la clase Trace para realizar un seguimiento de determinados tipos de acciones en una aplicación implementada a medida que se producen (por ejemplo, la creación de nuevas conexiones de base de datos) y, por tanto, pueden supervisar la eficiencia de la aplicación.For example, you can use the Trace class to track particular types of actions in a deployed application as they occur (for example, creation of new database connections), and can therefore monitor the application's efficiency.

Seguimiento de código y depuraciónCode Tracing and Debugging

Durante el desarrollo, puede usar los métodos de salida de la clase Debug para mostrar mensajes en la ventana de salida del entorno de desarrollo integrado (IDE) de Visual Studio.During development, you can use the output methods of the Debug class to display messages in the Output window of the Visual Studio integrated development environment (IDE). Por ejemplo:For example:

Trace.WriteLine("Hello World!")  
Debug.WriteLine("Hello World!")  
System.Diagnostics.Trace.WriteLine("Hello World!");  
System.Diagnostics.Debug.WriteLine("Hello World!");  

Cada uno de estos ejemplos mostrará "Hello World!"Each of these examples will display "Hello World!" en la ventana de resultados cuando se ejecute la aplicación en el depurador.in the Output window when the application is run in the debugger.

Esto le permite depurar las aplicaciones y optimizar su rendimiento en función de su comportamiento en el entorno de prueba.This enables you to debug your applications and optimize their performance based on their behavior in your test environment. Puede depurar la aplicación en la compilación de depuración con el atributo condicional Debug activado para así recibir toda la salida de la depuración.You can debug your application in your debug build with the Debug conditional attribute turned on so that you receive all debugging output. Cuando la aplicación está lista para el lanzamiento, puede compilar la versión de lanzamiento sin activar el atributo condicional Debug, con lo que el compilador no incluirá el código de depuración en el ejecutable final.When your application is ready for release, you can compile your release build without turning on the Debug conditional attribute, so that the compiler will not include your debugging code in the final executable. Para más información, vea Cómo: Realizar compilación condicional con Trace y Debug.For more information, see How to: Compile Conditionally with Trace and Debug. Para más información sobre diferentes configuraciones de compilación para la aplicación, vea Compilar y generar.For more information on different build configurations for your application, see Compiling and Building.

Asimismo, puede usar métodos de la clase Trace para seguir la ejecución de código en una aplicación instalada.You can also trace code execution in an installed application, using methods of the Trace class. Al colocar modificadores de seguimiento en el código, puede controlar si se realiza el seguimiento y cuál es su alcance.By placing Trace Switches in your code, you can control whether tracing occurs and how extensive it is. Con ello puede supervisar el estado de la aplicación en un entorno de producción.This lets you monitor the status of your application in a production environment. Esto es especialmente importante en una aplicación empresarial que usa varios componentes que se ejecutan en varios equipos.This is especially important in a business application that uses multiple components running on multiple computers. El control sobre el uso de los modificadores después de la implementación se realiza a través del archivo de configuración.You can control how the switches are used after deployment through the configuration file. Para más información, vea Cómo: Crear, inicializar y configurar modificadores de seguimiento.For more information, see How to: Create, Initialize and Configure Trace Switches.

Al desarrollar una aplicación para la que se va a usar seguimiento, normalmente se incluyen en el código de la aplicación tanto mensajes de seguimiento como mensajes de depuración.When you are developing an application for which you intend to use tracing, you usually include both tracing and debugging messages in the application code. Cuando la aplicación esté lista para implementarse, se puede compilar la versión de lanzamiento sin necesidad de activar el atributo condicional Debug.When you are ready to deploy the application, you can compile your release build without turning on the Debug conditional attribute. No obstante, se puede activar el atributo condicional Trace para que el compilador incluya el código de seguimiento en el ejecutable.However, you can turn on the Trace conditional attribute so that the compiler includes your trace code in the executable. Para más información, vea Cómo: Realizar compilación condicional con Trace y Debug.For more information, see How to: Compile Conditionally with Trace and Debug.

Fases del seguimiento de códigoPhases of Code Tracing

El seguimiento de código consta de tres fases:There are three phases of code tracing:

  1. Instrumentación: agregar código de seguimiento a la aplicación.Instrumentation — you add trace code to your application.

  2. Seguimiento: el código de seguimiento escribe información en el destino especificado.Tracing — the tracing code writes information to the specified target.

  3. Análisis: se evalúa la información de seguimiento para identificar y comprender los problemas de la aplicación.Analysis — you evaluate the tracing information to identify and understand problems in the application.

Durante el desarrollo, todos los métodos de salida debug y trace{i><i}escriben información en la ventana de salida de Visual Studio de forma predeterminada.During development, all debug and trace output methods write information to the Output window in Visual Studio by default. En una aplicación implementada, los métodos escriben información de seguimiento en los destinos que se especifiquen.In a deployed application, the methods write tracing information to the targets you specify. Para más información sobre cómo especificar un destino de salida para el seguimiento o la depuración, vea Agentes de escucha de seguimiento.For more information on specifying an output target for tracing or debugging, see Trace Listeners.

A continuación se ofrece una visión general de los pasos principales que intervienen en el uso del seguimiento para analizar y corregir posibles problemas en aplicaciones implementadas.The following is an overall view of the major steps typically involved in using tracing to analyze and correct potential problems in deployed applications. Para obtener más información sobre cómo realizar estos pasos, vea el vínculo apropiado.For more information on how to perform these steps, see the appropriate link.

Para usar el seguimiento en una aplicaciónTo use tracing in an application
  1. Considere qué salida de seguimiento desea recibir in situ después de haber implementado la aplicación.Consider which tracing output you will want to receive onsite after you have deployed the application.

  2. Cree un conjunto de conmutadores.Create a set of switches. Para obtener más información, consulte Procedimientos: configuración de modificadores de seguimiento.For more information, see How to: Configure Trace Switches.

  3. Agregue las instrucciones de seguimiento al código de aplicación.Add the trace statements to the application code.

  4. Determine dónde desea que aparezca la salida del seguimiento y agregue los agentes de escucha apropiados.Determine where you want the tracing output to appear and add the appropriate listeners. Para más información, vea Creación e inicialización de agentes de escucha de seguimiento.For more information, see Creating and Initializing Trace Listeners.

  5. Pruebe y depure la aplicación y el código de seguimiento que contiene.Test and debug your application and the tracing code it contains.

  6. Compile la aplicación en código ejecutable mediante uno de los siguientes procedimientos:Compile the application into executable code using one of the following procedures:

    • Use el menú Compilación junto con la página Depurar del cuadro de diálogo Páginas de propiedades del Explorador de soluciones.Use the Build menu along with the Debug page of the Property Pages dialog box in Solution Explorer. Use este procedimiento si compila en Visual Studio.Use this when compiling in Visual Studio.

      - O bien- or -

    • Use las directivas de compilador Trace y Debug para el método de línea de comandos de compilación.Use the Trace and Debug compiler directives for the command-line method of compiling. Para más información, vea Compilación condicional con Trace y Debug.For more information, see Compiling Conditionally with Trace and Debug. Use este procedimiento si compila desde la línea de comandos.Use this when compiling from the command line.

  7. Si se produce un problema durante el tiempo de ejecución, active el modificador de seguimiento adecuado.If a problem occurs during run time, turn on the appropriate trace switch. Para más información, vea Configuración de modificadores de seguimiento.For more information, see Configuring Trace Switches.

    El código de seguimiento escribe mensajes de seguimiento en un destino especificado, por ejemplo, una pantalla, un archivo de texto o un registro de eventos.The tracing code writes tracing messages to a specified target, for example, a screen, a text file, or an event log. El tipo de agente de escucha incluido en la colección Trace.Listeners determina el destino.The type of listener you included in the Trace.Listeners collection determines the target.

  8. Analice los mensajes de seguimiento para identificar y comprender los problemas de la aplicación.Analyze the tracing messages to identify and understand the problem in the application.

Instrumentación de seguimiento y aplicaciones distribuidasTrace Instrumentation and Distributed Applications

Con las aplicaciones distribuidas no resulta fácil probar la aplicación de la manera en que se usará.When you create a distributed application, you might find it difficult to test the application in the manner in which it will be used. No hay muchos equipos de desarrollo que tengan la capacidad de probar todas las posibles combinaciones de sistemas operativos o exploradores web (incluidas todas las opciones de idiomas de localización), o de simular el elevado número de usuarios que tendrán acceso simultáneo a la aplicación.Few development teams have the capability to test all possible combinations of operating systems or Web browsers (including all the localized language options), or to simulate the high number of users that will access the application at the same time. En estas circunstancias, no es posible probar cómo responderá una aplicación distribuida ante grandes volúmenes, diferentes instalaciones y comportamientos únicos de usuario final.Under these circumstances, you cannot test how a distributed application will respond to high volumes, different setups, and unique end-user behaviors. Además, muchas de las partes de una aplicación distribuida no disponen de ninguna interfaz de usuario con la que poder interactuar directamente o ver la actividad de esas partes.Also, many parts of a distributed application have no user interface with which you can interact directly or view the activity of those parts.

Pero es posible compensar esto permitiendo a las aplicaciones distribuidas describir determinados eventos de interés para los administradores del sistema, especialmente aquello que no funciona bien, mediante la instrumentación de la aplicación, es decir, mediante la colocación de instrucciones de seguimiento en puntos estratégicos del código.However, you can compensate for this by enabling distributed applications to describe certain events of interest to system administrators, especially things that go wrong, by instrumenting the application — that is, by placing trace statements at strategic locations in your code. A continuación, si ocurre algo inesperado en tiempo de ejecución (por ejemplo, un tiempo de respuesta excesivamente lento), podrá determinar la causa probable.Then if something unexpected occurs at run time (for example, excessively slow response time), you can determine the likely cause.

Con las instrucciones de seguimiento puede evitar la difícil tarea de examinar el código fuente original, modificarlo, volver a compilar e intentar reproducir el error de tiempo de ejecución dentro del entorno de depuración.With trace statements you can avoid the difficult task of examining the original source code, modifying it, recompiling, and attempting to produce the run-time error within the debugging environment. Recuerde que puede instrumentar una aplicación no solo para mostrar errores, sino también para supervisar el rendimiento.Remember that you can instrument an application not only to display errors, but also to monitor performance.

Colocación estratégica de las instrucciones de seguimientoStrategic Placement of Trace Statements

Debe tener especial cuidado al configurar las instrucciones de seguimiento para su uso en tiempo de ejecución.You must exercise special care when placing your trace statements for use during run time. Debe tener en cuenta la información de seguimiento que se necesitará en una aplicación implementada, de modo que estén cubiertos correctamente todos los posibles escenarios de seguimiento.You must consider what tracing information is likely to be needed in a deployed application, so that all likely tracing scenarios are adequately covered. Sin embargo, y dado que las aplicaciones que utilizan el seguimiento varían enormemente, no existen directrices generales para una implementación estratégica del seguimiento.Because applications that use tracing vary widely, however, there are no general guidelines for strategic placement of tracing. Para más información sobre cómo colocar instrucciones de seguimiento, vea Cómo: Agregar instrucciones de seguimiento al código de la aplicación.For more information on placing trace statements, see How to: Add Trace Statements to Application Code.

Salida del seguimientoOutput from Tracing

La salida del seguimiento se recopila mediante objetos denominados agentes de escucha.Trace output is collected by objects called listeners. Un agente de escucha es un objeto que recibe la salida de seguimiento y la escribe en un dispositivo de salida (normalmente un archivo de texto, registro o ventana).A listener is an object that receives trace output and writes it to an output device (usually a window, log, or text file). Cuando se crea un agente de escucha, normalmente se agrega a la colección Trace.Listeners, lo que le permite recibir toda la salida del seguimiento.When a trace listener is created, it is typically added to the Trace.Listeners collection, allowing the listener to receive all trace output.

La información de seguimiento siempre se escribe al menos en el destino de salida predeterminado de Trace, que es DefaultTraceListener.Tracing information is always written at least to the default Trace output target, the DefaultTraceListener. Si por algún motivo se ha eliminado DefaultTraceListener sin agregar otros agentes de escucha a la colección Listeners, no recibirá ningún mensaje de seguimiento.If for some reason you have deleted the DefaultTraceListener without adding any other listeners to the Listeners collection, you will not receive any tracing messages. Para más información, vea Agentes de escucha de seguimiento.For more information, see Trace Listeners.

En la tabla siguiente se enumeran los seis miembros Debug y los métodos Trace que escriben información de seguimiento.The six Debug members and Trace methods that write tracing information are listed in the following table.

MétodoMethod OutputOutput
AssertAssert Es el texto especificado o, si no se especifica ninguno, la pila de llamadas.The specified text; or, if none is specified, the Call Stack. La salida solo se escribe si la condición especificada como argumento en la instrucción Assert es false.The output is written only if the condition specified as an argument in the Assert statement is false.
ErrorFail Es el texto especificado o, si no se especifica ninguno, la pila de llamadas.The specified text; or, if none is specified, the Call Stack.
EscrituraWrite Es el texto especificado.The specified text.
WriteIfWriteIf El texto especificado, si se satisface la condición especificada como argumento en la instrucción WriteIf.The specified text, if the condition specified as an argument in the WriteIf statement is satisfied.
WriteLineWriteLine Es el texto especificado y un retorno de carro.The specified text and a carriage return.
WriteLineIfWriteLineIf El texto especificado y un retorno de carro si se satisface la condición especificada como argumento en la instrucción WriteLineIf.The specified text and a carriage return, if the condition specified as an argument in the WriteLineIf statement is satisfied.

Todos los agentes de escucha de la colección Listeners reciben los mensajes descritos en la tabla anterior, pero las acciones emprendidas pueden variar según el tipo de agente de escucha que recibe el mensaje.All listeners in the Listeners collection receive the messages described in the above table, but the actions taken may vary depending on what kind of listener receives the message. Por ejemplo, DefaultTraceListener muestra un cuadro de diálogo de aserción cuando recibe una notificación de Fail o de Assert con errores, pero TextWriterTraceListener simplemente escribe el resultado en su secuencia.For example, the DefaultTraceListener displays an assertion dialog box when it receives a Fail or failed Assert notification, but a TextWriterTraceListener simply writes the output to its stream.

Si implementa su propio agente de escucha podrá obtener resultados personalizados.You can produce custom results by implementing your own listener. Un agente de escucha de seguimiento personalizado puede, por ejemplo, mostrar los mensajes en un cuadro de mensaje o conectarse a una base de datos para agregar mensajes a una tabla.A custom trace listener might, for example, display the messages to a message box, or connect to a database to add messages to a table. Todos los agentes de escucha personalizados deben admitir los seis métodos mencionados anteriormente.All custom listeners should support the six methods mentioned above. Para obtener más información sobre cómo crear agentes de escucha definidos por el desarrollador, consulte TraceListener en la documentación de .NET Framework.For more information on creating developer-defined listeners, see TraceListener in the .NET Framework reference.

Los métodos Write y WriteLine siempre escriben el texto que especifique.The Write and WriteLine methods always write the text that you specify. Assert, WriteIf y WriteLineIf requieren un argumento booleano que determina si deben escribir el texto especificado; solo escriben el texto si la expresión es true (para WriteIf y WriteLineIf), o false (para Assert).Assert, WriteIf, and WriteLineIf require a Boolean argument that controls whether or not they write the specified text; they write the specified text only if the expression is true (for WriteIf and WriteLineIf), or false (for Assert). El método Fail siempre escribe el texto especificado.The Fail method always writes the specified text. Para más información, vea Cómo: Agregar instrucciones de seguimiento al código de la aplicación y la referencia de .NET Framework.For more information, see How to: Add Trace Statements to Application Code and the .NET Framework reference.

Cuestiones de seguridadSecurity Concerns

Si no deshabilita el seguimiento y la depuración antes de implementar una aplicación ASP.NET, la aplicación puede revelar información sobre sí misma que podría ser aprovechada por un programa malintencionado.If you do not disable tracing and debugging before deploying an ASP.NET application, your application may reveal information about itself that could be exploited by a malicious program. Para más información, vea Cómo: Realizar compilación condicional con Trace y Debug, Compilar y generar y Cómo: Crear, inicializar y configurar modificadores de seguimiento.For more information, see How to: Compile Conditionally with Trace and Debug, Compiling and Building, and How to: Create, Initialize and Configure Trace Switches. La depuración también es configurable a través de Internet Information Services (IIS).Debugging is also configurable through Internet Information Services (IIS).

Consulte tambiénSee also