Introducción a la instrumentación y el seguimiento

Actualización: noviembre 2007

El término instrumentación se refiere a la capacidad de supervisar o medir el nivel de rendimiento de un producto y diagnosticar errores. En programación, esto implica que la aplicación debe incorporar:

  • Seguimiento del código – Consiste en la capacidad de recibir mensajes informativos sobre la ejecución de una aplicación durante la propia ejecución.

  • Depuración – Consiste en detectar y resolver errores de programación en una aplicación durante su desarrollo. Para obtener más información, vea Depurar.

  • Contadores de rendimiento – Son componentes que permiten supervisar el rendimiento de una aplicación. Para obtener más información, vea Introducción a la supervisión de umbrales de rendimiento.

  • Registros de eventos – Son componentes que permiten albergar y realizar un seguimiento de eventos importantes en la ejecución de una aplicación. Para obtener más información, vea la clase EventLog.

Las clases Trace y Debug proporcionan los medios necesarios para supervisar y examinar el rendimiento de una aplicación durante su desarrollo o después de la implantación. Por ejemplo, puede utilizar la clase Trace para realizar un seguimiento de determinados tipos de acciones en una aplicación implantada a medida que se producen (por ejemplo, creación de nuevas conexiones de base de datos), y, de ese modo, supervisar la eficiencia de la aplicación.

Seguimiento y depuración del código

Durante el desarrollo, puede utilizar los métodos que generan resultados de la clase Debug para mostrar mensajes en la ventana Resultados del entorno de desarrollo integrado (IDE) de Visual Studio. Por ejemplo:

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

Cada uno de los ejemplos anteriores muestra la frase "Hello World!" en la ventana Resultados cuando la aplicación se ejecuta en el depurador.

De este modo, es posible depurar las aplicaciones y optimizar su rendimiento en el entorno de prueba según su comportamiento. Puede depurar la aplicación en la versión generada para depuración, con el atributo condicional Debug activado, de modo que reciba todos la información de depuración. Cuando la aplicación esté preparada para su lanzamiento, puede compilar la versión definitiva con el atributo condicional Debug desactivado, de modo que el compilador no incluya el código de depuración en el ejecutable final. Para obtener más información, vea Cómo: Realizar compilación condicional con Trace y Debug. Para obtener más información sobre las distintas configuraciones de generación de la aplicación, vea Generar aplicaciones en Visual Studio.

Asimismo, puede seguir la ejecución del código en una aplicación instalada mediante los métodos de la clase Trace. Colocando Modificadores de seguimiento en el código, puede controlar si se realiza el seguimiento y cuál es su alcance. De esta forma, puede supervisar el estado de la aplicación en un entorno de producción. Esto es especialmente importante en una aplicación empresarial que utiliza múltiples componentes que se ejecutan en varios equipos. Mediante el archivo de configuración, puede controlar cómo se utilizan los modificadores de seguimiento después de la implantación. Para obtener más información, vea Cómo: Configurar modificadores de seguimiento.

Cuando se desarrolla una aplicación para la que se desea utilizar seguimiento, el código de la aplicación incluye, normalmente, tanto mensajes de seguimiento como de depuración. Cuando la aplicación está lista para su implantación, puede compilar la versión final sin activar el atributo condicional Debug. No obstante, puede activar el atributo condicional Trace, de modo que el compilador incluya el código de seguimiento en el ejecutable. Para obtener más información, vea Cómo: Realizar compilación condicional con Trace y Debug.

Fases del seguimiento del código

El seguimiento del código presenta tres fases:

  1. Instrumentación: el código de seguimiento se incluye en la aplicación.

  2. Seguimiento: el código de seguimiento escribe información en el destino especificado.

  3. Análisis: la información de seguimiento se evalúa para identificar y comprender problemas de la aplicación.

Durante el desarrollo, de manera predeterminada, todos los métodos de seguimiento y depuración que generan resultados escriben la información en la ventana Resultados de Visual Studio. En una aplicación implementada, los métodos escriben la información de seguimiento en el destino especificado. Para obtener más información sobre cómo especificar un destino para el resultado del seguimiento o la depuración, vea Agentes de escucha de seguimiento.

Instrumentación de seguimiento y aplicaciones distribuidas

Cuando se crea una aplicación distribuida, puede resultar difícil probar la aplicación en el modo en que se utilizará. Pocos equipos de desarrollo disponen de la capacidad para probar todas las combinaciones posibles de sistemas operativos o exploradores Web (incluidas todas las opciones de idiomas disponibles), o para simular el elevado número de usuarios que utilizarán la aplicación al mismo tiempo. Bajo estas circunstancias, no es posible probar cómo responderá una aplicación distribuida a volúmenes elevados, diferentes instalaciones y comportamientos particulares de los usuarios finales. Además, muchas partes de una aplicación distribuida no presentan una interfaz de usuario con la que interactuar directamente o con la que observar la actividad de esas partes.

No obstante, es posible compensar esas dificultades haciendo que las aplicaciones distribuidas describan determinados eventos de interés para los administradores del sistema, especialmente aquello que no funciona bien; esto se puede conseguir instrumentando la aplicación, es decir, colocando instrucciones de seguimiento en puntos estratégicos del código. En ese caso, si ocurre algo inesperado durante la ejecución (por ejemplo, una respuesta excesivamente lenta), se puede determinar la causa probable.

Gracias a las instrucciones de seguimiento, es posible evitar la difícil tarea de examinar el código fuente original, modificarlo, volver a compilarlo e intentar reproducir el error en tiempo de ejecución dentro del entorno de depuración. Recuerde que puede instrumentar una aplicación no sólo para mostrar errores, sino también para supervisar el rendimiento.

Colocación estratégica de las instrucciones de seguimiento

Las instrucciones de seguimiento que se utilizarán durante la ejecución deben colocarse con especial atención. En primer lugar, debe considerar qué información de seguimiento puede ser necesaria, para contemplar adecuadamente todos los escenarios de seguimiento probables. Sin embargo, puesto que las aplicaciones que utilizan seguimiento varían ampliamente, no es posible dar unas directrices generales para la colocación estratégica del código de seguimiento. Para obtener más información sobre cómo colocar las instrucciones de seguimiento, vea Cómo: Agregar instrucciones de seguimiento al código de una aplicación.

Resultados del seguimiento

Los resultados del seguimiento se recopilan mediante objetos denominados agentes de escucha. Un agente de escucha es un objeto que recibe la información de seguimiento y la escribe en un dispositivo de salida (normalmente, una ventana, un registro o un archivo de texto). Cuando se crea un agente de escucha, normalmente se agrega a la colección Trace.Listeners, lo que le permite recibir todos los resultados de seguimiento.

La información de seguimiento siempre se escribe, al menos, en el destino de salida Trace predeterminado, es decir, DefaultTraceListener. Si, por alguna razón, se ha eliminado el destino DefaultTraceListener sin agregar otros agentes de escucha a la colección Listeners, no se recibirá ningún mensaje de seguimiento. Para obtener más información, vea Agentes de escucha de seguimiento.

En la tabla siguiente, se muestran los seis métodos Debug y Trace que escriben información de seguimiento.

Método

Resultados

Assert

El texto especificado; o, si no se especifica ninguno, la pila de llamadas. El resultado sólo se escribe si la condición especificada como argumento de la instrucción Assert toma el valor false (falso).

Fail

El texto especificado; o, si no se especifica ninguno, la pila de llamadas.

Write

El texto especificado.

WriteIf

El texto especificado, si se cumple la condición especificada como argumento de la instrucción WriteIf.

WriteLine

El texto especificado y un retorno de carro.

WriteLineIf

El texto especificado y un retorno de carro, si se cumple la condición especificada como argumento de la instrucción WriteLineIf.

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. Por ejemplo, el agente de escucha DefaultTraceListener muestra un cuadro de diálogo de aserción cuando recibe una notificación Fail o una notificación Assert que no cumple la condición, pero un agente TextWriterTraceListener simplemente escribe el resultado en su secuencia de salida.

Puede conseguir resultados personalizados si implementa su propio agente de escucha. Un agente de escucha de seguimiento personalizado podría, por ejemplo, mostrar los mensajes en un cuadro de mensajes, o también conectarse a una base de datos para agregar los mensajes a una tabla. Todos los agentes de escucha personalizados deberían admitir los seis métodos mencionados anteriormente. Para obtener más información sobre cómo crear agentes de escucha definidos por el desarrollador, vea TraceListener en la Referencia de .NET Framework.

Nota para Visual Basic:

En Visual Basic 2005, los métodos Debug.Write, Debug.WriteIf, Debug.WriteLine y Debug.WriteLineIf han reemplazado el método Debug.Print que estaba disponible en las versiones anteriores de Visual Basic.

Los métodos Write y WriteLine siempre escriben el texto que se especifica. Assert, WriteIf y WriteLineIf requieren un argumento Boolean que controle si escriben o no el texto especificado; sólo escriben el texto especificado si la expresión es true (en el caso de WriteIf y WriteLineIf) o false (en el caso de Assert). El método Fail siempre escribe el texto especificado. Para obtener más información, vea Cómo: Agregar instrucciones de seguimiento al código de una aplicación y la Referencia de .NET Framework.

Cuestiones de seguridad

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 aprovechar algún programa creado con fines malintencionados. Para obtener más información, vea Cómo: Realizar compilación condicional con Trace y Debug, Generar aplicaciones en Visual Studio y Cómo: Configurar modificadores de seguimiento. La depuración también se puede configurar a través de los Servicios de Internet Information Server (IIS).

Vea también

Tareas

Cómo: Agregar instrucciones de seguimiento al código de una aplicación

Cómo: Configurar modificadores de seguimiento

Conceptos

Modificadores de seguimiento

Agentes de escucha de seguimiento

Otros recursos

Seguimiento e instrumentación de aplicaciones