Share via


Depurar objetos de secuencias de comandos en páginas ASP

Actualización: noviembre 2007

Para depurar objetos de secuencias de comandos en páginas ASP, tenga en cuenta los siguientes extremos:

  • ¿Cuál es el modelo de objetos de secuencias de comandos?

  • La depuración y la biblioteca de secuencias de comandos

  • Habilitar la depuración de objetos de secuencias de comandos

  • La notificación de errores

  • El seguimiento de los eventos

  • El seguimiento de las advertencias

¿Cuál es el modelo de objetos de secuencias de comandos?

El modelo de objetos de secuencias de comandos de ASP define un conjunto de objetos con los eventos, propiedades y métodos que se pueden utilizar en una aplicación Web. La mayoría de los objetos de secuencias de comandos representan elementos de la interfaz de usuario, como botones y cuadros de texto, y funcionan de manera similar a los controles en Microsoft Visual Basic.

Los objetos de secuencias de comandos en Microsoft Visual Studio 2005 no requieren un motor en tiempo de ejecución especial; se definen en archivos de secuencias de comandos incluidos en la página ASP cuando se utilizan los objetos. Aunque estos archivos son simplemente secuencias de comandos, encapsulan comandos ADO (ActiveX Data Objects) y elementos HTML para crear objetos sofisticados que admitan la programación controlada por eventos.

Hay dos versiones de cada objeto de secuencias de comandos: una que se ejecuta en el servidor en ASP para exploradores HTML 3.2 genéricos, y otra que se ejecuta en el cliente en Internet Explorer 4.0 y posterior. El modelo de programación (eventos, métodos y propiedades) es idéntico para ambas versiones. Los objetos de secuencias de comandos se pueden crear y utilizar directamente mediante código o mediante controles en tiempo de diseño. Cuando se guarda la página ASP, el código del objeto de secuencias de comandos se conserva como una combinación de secuencias de comandos y HTML estándar.

La depuración y la biblioteca de secuencias de comandos

Dado que los propios objetos de secuencias de comandos están escritos en secuencias de comandos, la depuración de las secuencias de comandos que interactúan con el modelo de objetos de secuencias de comandos puede ser complicada por los siguientes motivos:

  • En primer lugar, cuando se utiliza el depurador para recorrer la secuencia de comandos propia, puede que se acabe recorriendo el código poco conocido y sofisticado de la biblioteca de secuencias de comandos.

  • En segundo lugar, si se produce un error en la biblioteca de secuencias de comandos, recorrer dicho código puede resultar tedioso y puede no ayudar a determinar con precisión el error.

  • Finalmente, a veces puede resultar difícil seguir la secuencia de eventos y el flujo de control entre la secuencia de comandos y el modelo de objetos de secuencias de comandos.

Ahora, ya puede depurar la aplicación en estas circunstancias con las siguientes opciones de depuración del modelo de objetos de secuencias de comandos:

  • Capturar errores de bajo nivel: si un objeto de secuencias de comandos, como Recordset, detecta un error, podrá notificarlo con mensajes de error detallados. Esta opción ayuda a detectar errores con componentes que pueden no funcionar correctamente por motivos externos.

  • Seguir eventos: puede configurar la página para que muestre una lista de los eventos que se desencadenan cuando se producen. Esta opción ayuda a ver cuándo se ejecutan las secuencias de comandos con relación a los eventos del modelo de objetos de secuencias de comandos.

  • Seguir advertencias: se pueden ver los mensajes de advertencia que indican posibles errores que, de otra forma, no se notificarían. Esta opción ayuda a detectar problemas como los originados por pasar parámetros no válidos a un método.

Habilitar la depuración de objetos de secuencias de comandos

Una página ASP suele incluir un bloque de secuencias de comandos en la parte superior con las opciones de depuración. De forma predeterminada, las opciones están desactivadas. El bloque de secuencias de comandos es como el que aparece a continuación:

<SCRIPT id=DebugDirectives runat=server language=javascript>

// Set these to true to enable debugging or tracing

@set @debug=false

@set @trace=false

</SCRIPT>

La depuración de los objetos de secuencias de comandos requiere que se ejecute JScript 5.0 o posterior en el servidor. La versión 5.0 de JScript se puede descargar en el servidor desde el sitio Web de Microsoft.

Para habilitar la depuración, establezca las opciones de depuración que desee en el valor true. Por ejemplo, para capturar los errores de bajo nivel, cambie el bloque a:

<SCRIPT id=DebugDirectives runat=server language=javascript>
// Set these to true to enable debugging or tracing
@set @debug = true
@set @trace = false
</SCRIPT>

El bloque de la opción de depuración debe aparecer inmediatamente detrás de la directiva @language en la parte superior de la página ASP.

Se pueden configurar cuatro opciones, tal y como se describe en la lista siguiente:

Nombre

Finalidad

@debug

Notifica los errores seleccionados en objetos de secuencias de comandos específicos.

@trace

Activa las dos opciones de seguimiento siguientes.

@trace_events

Activa el seguimiento de eventos.

@trace_warnings

Activa las advertencias para los posibles errores que suelen producirse sin que se notifiquen.

Más adelante en este tema, se recoge información más detallada sobre las configuraciones individuales.

Nota:

Si establece el valor de @trace en true, reemplazará la configuración de @trace_events y @trace_warnings. Sin embargo, si el valor de @trace es false, podrá activar y desactivar cada opción de seguimiento individualmente.

Las opciones de seguimiento individuales no forman parte del bloque de secuencias de comandos predeterminado en la página ASP, por lo que es preciso agregarlas si desea configurarlas individualmente. Por ejemplo, para habilitar sólo el seguimiento de los eventos y no activar las advertencias:

<SCRIPT id=DebugDirectives runat=server language=javascript>

@set @debug = false

@set @trace = false

@set @trace\_events = true

</SCRIPT>

Si utiliza Microsoft Internet Explorer 4.x y configura cualquiera de las opciones @trace, reemplazará la etiqueta BODY, lo que puede deshabilitar el enlace de eventos en la etiqueta BODY y causar la omisión de los atributos. Este problema no existe si utiliza Internet Explorer 5.0 o posterior.

El siguiente estilo de enlace de eventos no funcionará en Internet Explorer 4.0:

<BODY onload="initialize()">

Para resolver esta limitación, utilice otro mecanismo de enlace. Si utiliza Visual Basic Scripting Edition (VBScript), podrá utilizar el enlace implícito:

<SCRIPT LANGUAGE="VBScript">

Function window_onload()

initialize()

End Function

</SCRIPT>

Si utiliza JScript, podrá llamar a una secuencia de comandos global que asigna un puntero de función a un evento de objeto de una ventana, como en el siguiente ejemplo:

<SCRIPT LANGUAGE="JScript">
   window.onload = initialize
</SCRIPT>

Si la etiqueta BODY contiene atributos, deberá establecerlos en la secuencia de comandos en lugar de establecer las propiedades del objeto de documento. Por ejemplo, si la etiqueta BODY contiene el atributo BGCOLOR="#FFFF00", podrá establecerlo mediante la siguiente secuencia de comandos. Utilice la técnica anteriormente mostrada para llamar a esta secuencia de comandos cuando se cargue el documento por primera vez.

<SCRIPT LANGUAGE="JScript">
function initialize(){
   document.bgColor = "#FFFF00";
}
</SCRIPT>

La notificación de errores

Algunos objetos de secuencias de comandos interactúan con otros objetos fuera de la página. Por ejemplo, el objeto Recordset utiliza ADO para obtener acceso a las bases de datos. Si se generan errores durante estas interacciones, la información de error notificada por el objeto externo puede ser ambigua o puede parecer incompleta en el contexto de la página.

La opción @debug habilita un mecanismo de notificación que captura e interpreta un conjunto común de estos tipos de error. La información de error se escribe en la página ASP y aparece junto con el contenido normal de la página. En algunos casos, también aparece el mensaje de error subyacente.

Por ejemplo, si el valor de @debug es true y el objeto Recordset intenta ejecutar una instrucción SQL no válida, en la página puede aparecer algo similar a lo que figura a continuación:

SCRIPTING OBJECT MODEL EXCEPTION:

FILE: recordset.asp

FUNCTION: Recordset1.open()

DESCRIPTION: Failed to open the ADO recordset. Check for the following

possible causes:

An invalid SQL statement.

Missing or invalid database object name (check Recordset DTC properties)

Missing parameters or parameter type mismatch (parameters must be set

before recordset is opened).

El seguimiento de los eventos

Cuando una página ASP utiliza el modelo de objetos de secuencias de comandos, los objetos de secuencias de comandos individuales desencadenan eventos en respuesta a los cambios de estado (como Recordset1_ondatasetcomplete) o en respuesta a las acciones realizadas por el usuario (como Button1_onclick). En muchos casos, deberá saber cuándo se ejecutan sus propias secuencias de comandos con relación a los eventos que desencadena el modelo de objetos de secuencias de comandos.

Para ello, active el seguimiento de eventos estableciendo el valor de la opción @trace o @trace\_events en true. Cuando habilita el seguimiento de eventos, se escribe la información de eventos en la página ASP conforme se producen los eventos. Por ejemplo, parte de una página ASP podría tener la siguiente apariencia:

EVENT TRACE: thisPage fired oninit event.

EVENT TRACE: Recordset1 fired onbeforeopen event.

EVENT TRACE: Recordset1 fired onrowenter event.

EVENT TRACE: Recordset1 fired ondatasetchanged event.

EVENT TRACE: Recordset1 fired ondatasetcomplete event.

Para determinar cuándo se ejecuta su secuencia de comandos, incluya instrucciones Response.Write en los puntos importantes, tal y como se muestra en la siguiente secuencia de comandos. En el ejemplo se establece un parámetro para un conjunto de registros basándose en la información de un cuadro de texto. Se notifica cada paso mostrándolo en la página.

Sub btnQuery_onclick()

Recordset1.close()

Response.Write("Finished closing recordset.")

Recordset1.setParameter 1, txtLastName.value

Response.Write("Finished resetting query parameter.")

Recordset1.open()

Response.Write("Finished reopening recordset.")

End Sub

Mediante los comandos de compilación condicional de JScript, se puede especificar que las instrucciones Response.Write aparezcan en la página sólo si se establecen las opciones de depuración. Por ejemplo, en el bloque siguiente, se ejecuta la instrucción Response.Write sólo si el valor de la opción @trace es true:

@if (@trace)

Response.Write("Ready to set SQL statement parameters.");

@end

No sólo se pueden utilizar las opciones de depuración sino que también se pueden crear indicadores de condición propios, como en el siguiente ejemplo:

@set @trace\_custom = true

' ... other script here

@if (@trace_custom)

Response.Write("Ready to set SQL statement parameters.");

@end

Nota:

Antes de presentar la página, asegúrese de establecer el valor de las condiciones de depuración en false.

Para obtener más detalles sobre la compilación condicional, vea los comandos @if @set en la sección Instrucciones del sitio Web de Microsoft Scripting.

El seguimiento de las advertencias

Para que los objetos de secuencias de comandos sean lo más sólidos posible y con el fin de minimizar la información no deseada en las páginas ASP, los objetos de secuencias de comandos no suelen notificar los errores que no sean graves. Por ejemplo, si se pasa un valor no válido a un método de un objeto de secuencias de comandos y el objeto no deja de funcionar completamente debido a ese valor, dicho objeto suele seguir ejecutándose sin que aparezca un mensaje de error. Sin embargo, durante la fase de desarrollo de una aplicación, normalmente se desea saber si el objeto de secuencias de comandos sufre algún problema. A veces, los problemas no notificados pueden originar otros problemas más adelante en la fase de ejecución de la página, por lo que será más difícil su depuración.

La solución reside en realizar un seguimiento de las advertencias estableciendo el valor de la opción @trace o @trace\_warnings en true. Si un objeto de secuencias de comandos detecta un posible problema, escribirá en la página la correspondiente información con el siguiente formato:

WARNING TRACE:

FILE: recordset.asp

FUNCTION: Recordset1.open()

DESCRIPTION: Recordset is already open.

Vea también

Tareas

Cómo: Habilitar la depuración de secuencias de comandos en Internet Explorer

Conceptos

Introducción al procesamiento de secuencias de comandos de ASP

Otros recursos

Depurar aplicaciones de ASP