martes, 19 de octubre de 2010

Depuración activa en ASP.NET?

Hoy quería saber cómo condicionar cierto código en un sitio web o aplicación web, según si está o no la depuración activa.

Para ello, he empezado leyendo este post
http://www.west-wind.com/Weblog/posts/10228.aspx  del que he sacado algunas ideas.

Básicamente tenemos disponibles los siguientes métodos y propiedades para detectar en tiempo de ejecución si nuestra aplicación está o no en modo depuración… que por cierto nunca en producción debería estar en depuración y si no te lo crees, léete esto y me dirás http://weblogs.asp.net/scottgu/archive/2006/04/11/442448.aspx

IsDebuggingEnabled
http://msdn.microsoft.com/en-us/library/system.web.httpcontext.isdebuggingenabled.aspx

Debugger.IsAttached
http://msdn.microsoft.com/en-us/library/system.diagnostics.debugger.isattached.aspx

IsDebuggingEnabled es simplemente un wrapper para no tener que leer directamente el valor desde el web.config con algo parecido a esto (que también nos valdría pero ya son ganas…)

Configuration.ConfigurationManager.GetSection('system.web/compilation').Debug

Debugger.IsAttached tampoco es definitivo porque no queremos saber si hay un depurador asociado al proceso (esto es que estamos depurando por ejemplo desde el IDE), sino si estamos en modo depuración.

Tanto en un sitio web como en una aplicación web y sin importar la configuración activa (esto es bien Debug para sitio web, bien Debug o Release para una aplicación web).

  • ·        F5 + con debug=”true” en web.config
  • IsDebuggingEnabled = True
  • Debugger.IsAttached = True
  • ·        Ctrl + F5 + con debug=”true” en web.config
  • IsDebuggingEnabled = True
  • Debugger.IsAttached = False
  • ·        Ctrl + F5 + con debug=”false” en web.config
  • IsDebuggingEnabled = False
  • Debugger.IsAttached = False

De lo anterior se deduce que la propiedad que nos interesa es IsDebuggingEnabled, así que:

        If Context.IsDebuggingEnabled Then

            '  modo de depuración activo

        Else

            '  modo de depuración no activo

        End If

Sólo nos queda hablar de #If DEBUG, pero la verdad es que no hay mucho que hablar puesto que en VB no funciona, pero si en C#... y sólo mencionar que en C# no importa cuál sea el valor de debug en el web.config, puesto que se guía exclusivamente por la versión de configuración activa (Debug o Release).

Y un último apunte es que si te fijas, aún cuando compilas en modo Release, se generan ficheros .pdb y entonces ¿los puedo quitar? ¿Está bien que los quite? Yo personalmente los voy a quitar, pero literatura al respecto y mil discusiones hay por internet:

http://forums.asp.net/p/1539298/3745787.aspx

http://gchandra.wordpress.com/2008/02/22/disable-pdp-file-generation-in-release-mode/

http://geekswithblogs.net/SudheersBlog/archive/2006/09/22/92054.aspx

clip_image002

Un saludo!

No hay comentarios:

Publicar un comentario