Compartir a través de


Introducción a la instrumentación y el seguimiento

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:

  • Traza 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 el seguimiento y la resolución de 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 Introduction to Monitoring Performance Thresholds.

  • Registros de eventos – Son componentes que permiten albergar y realizar una traza 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 una traza 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.

Traza 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 de salida 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!" (Hola a todos) en la ventana de salida 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 compilada 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 compilació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 la traza 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 traza 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 la traza, el código de la aplicación incluye, normalmente, tanto mensajes de traza 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 traza en el ejecutable. Para obtener más información, vea Cómo: Realizar compilación condicional con Trace y Debug.

Fases de la traza del código

La traza del código presenta tres fases:

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

  2. Traza: el código de traza escribe información en el destino especificado.

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

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

Instrumentación de traza 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 traza 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 traza, 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 traza

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

Resultados de la traza

Los resultados de la traza se recopilan mediante objetos denominados agentes de escucha. Un agente de escucha es un objeto que recibe la información de traza 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 traza.

La información de traza 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 traza. 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 traza.

Método

Output

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).

Con errores

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 traza 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 BasicNota 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 la traza 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 Internet Information Services (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