asp.net - session_end - ¿Es posible depurar Global.asax?
web config asp net (10)
- Adjunte el depurador al proceso de IIS.
- Abra el archivo global.asax y coloque un punto de interrupción.
- Agregue un espacio al archivo web.config y guarde el archivo (esto hace que la aplicación web actual se restablezca);
- Actualizar / ir a una página web en el sitio.
- Mire con asombro cuando el depurador se detiene en su punto de interrupción. :)
No puedo depurar el archivo global.asax!
Tengo algunos códigos en el método Application_Start()
pero cuando establezco un punto de ruptura en el método, ¡se ignora!
¿Esto es normal?
Elimine el global.asax
y agregue uno nuevo. En mi solución, ha habido un global.asax
y un global.asax.cs
.
Todos los métodos ( Session_Start
, Application_Start
, ...) han estado en los archivos bot, pero solo se han considerado los que están en global.asax
. Por lo tanto, los puntos de corte y el código en el cs no hacen nada.
Solo después de global.asax.cs
el archivo, global.asax.cs
tenía los métodos adecuados y se ejecutaban.
En caso de que todas las respuestas no funcionen, intente:
<compilation debug="true" ... />
en web.config
. ;)
No espere que se llame inmediatamente a la función Application_Start () presionando f5. Application_Start () se invoca solo cuando se realiza la primera solicitud a la aplicación. Extraño pero cierto.
Otra alternativa al System.Diagnostics.Debugger.Break();
aceptado System.Diagnostics.Debugger.Break();
sería
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Launch();
//...
}
que no debería romper el código y debería iniciar el depurador incluso si el servicio se inició con diferentes derechos.
Sí, es normal.
Application_Start()
es procesado por IIS.
Pero todos los otros métodos, por ejemplo Session_Start
, y todos los demás, excepto Application_Start()
se pueden depurar normalmente.
Tal vez deberías probar:
- detener el servidor de desarrollo en la barra de tareas
- cambiando la configuración de versión a depuración
Una forma simple de romper en Application_Start()
es usar la clase System.Diagnostics.Debugger
. Puede forzar que la aplicación se rompa insertando System.Diagnostics.Debugger.Break()
donde desea que se rompa el depurador.
void Application_Start(object sender, EventArgs e)
{
System.Diagnostics.Debugger.Break();
// ...
}
Verifique que su aplicación web esté en modo de depuración ( <compilation debug="true">
en web.config).
Si usa el IIS del desarrollador iniciado por VS, simplemente reinícielo o vuelva a generar la aplicación.
Si tiene IIS normal, tiene dos opciones:
- Para el sitio web está configurado para trabajar con la carpeta de desarrollo (donde se implementa su proyecto web VS) solo tiene que reiniciar el grupo de aplicaciones para ese sitio web y comenzar a depurar antes de que la primera solicitud llegue al servidor (siempre puede reiniciar el grupo de aplicaciones durante la depuración) )
- Para el sitio web que funciona en otra carpeta o incluso en un servidor remoto, debe adjuntarse al proceso. Para hacer esto, necesita un depurador remoto instalado en una máquina remota o la suya (depende de la ubicación del servidor web) y use
Debug - Attach to process
menú, ingrese el nombre de la computadora y luego seleccione un proceso para depurar. Por lo general, es un w3wp.exe que funciona en el tipo de modo administrado.
Application_Start()
se invoca una vez por AppDomain. Si no está llegando a su punto de corte, significa que el dominio de la aplicación ya fue creado, haga lo siguiente:
- En la barra de inicio rápido, hay un icono para el servidor web VS (es el que dice "Local Host Some Port"). Haga clic derecho y elija "Parar" o "Cerrar". Esto debería matar el AppDomain.
- Si está utilizando IIS, debe reiniciar su sitio manualmente.
- Alternativamente, la modificación de la configuración web o del archivo Global.asax suele ser suficiente para reiniciar AppDomain.
- Reinicie su depuración, debe llegar a sus puntos de interrupción ahora.