Hay un apunte importante que hacer a la hora de depurar las páginas: ¡Usa Option Explicit! Si escribes:
<%
Option Explicit
%>
al comienzo de tus scripts, estarás forzado a declarar TODAS tus variables. Esto significa que cualquier variable que no hayas declarado con Dim variable, te devolverá un error al utilizarla. La utilidad de esto es que evita que cometas errores al escribir el nombre de la variable. Si escribes el siguiente código:
<%
Dim miedad
' Por ejemplo el usuario mete su edad en un formulario
miedad=Request.Form("Edad")
....
Response.Write(miedaf)
...
%>
y no utilizas Option Explicit, no verás ningún error pero el Response.Write escribirá 0, -1 o vete tú a saber qué porque la variable miedaf empieza a existir en ese momento.
En cambio, si utilizas Option Explicit, te dará un error diciéndote que la variable miedaf no está declarada. ¿Util, no?
Otro apunte interesante es intercalar Response.Write's en las partes de código que hagan muchas tareas, con muchos objetos ADO. Por ejemplo, tenemos un script que abre un fichero, lee el contenido en una variable y después hace cosas con esa cadena. Si tenemos algún error en todo ese fragmento, probablemente tendremos uno de "Error en Server.CreateObject", alguno de ADO, la cadena estará vacía...
Es útil por lo tanto poner algo como:
<%
Dim oFSO, oFich, contenido, fichero
...
fichero=Server.MapPath("../fichero.txt")
'Comprobamos si el fichero es el que queremos
Response.Write(fichero)
set oFSO=Server.CreateObject("Scripting.FileSystemObject")
set oFich=oFSO.OpenTextFile(fichero)
contenido=oFich.ReadAll
'Vemos qué tiene el fichero (SI NO ES MUY GRANDE CLARO!)
Response.Write(contenido)
...
%>
Después, cuando ya funciona, comentamos los Response.Write y ya está. De este modo seguimos fácilmente cómo va ejecutando la página, y veremos qué ha hecho y dónde ha terminado en caso de error.