2010-04-26 7 views
8

Si es así; ¿Dónde puedo conseguirlo?¿Hay un visualizador de depurador de Visual Studio para la sesión de ASP.NET?

+0

¿Se da cuenta de que cuando se pulse un punto de interrupción sólo se puede abrir la ventana de depuración inmediata y 'Page.Session' tipo para verlo? – slugster

+0

Sí. Esperaba un visualizador que me mostrara una vista estructurada de cada objeto presente en la sesión, de una manera mágica que no requiriera que tuviera un reloj en las teclas que me interesaron. Soy reversible- ingeniería de código heredado profundamente anidado, y desea establecer un punto de interrupción donde me interesa, pero no en cada acceso de sesión. –

Respuesta

2

¿Has probado this uno de Codeproject? Después de corregir la referencia a Microsoft.VisualStudio.DebuggerVisualizers de la versión 9.0 a 10.0 funcionó en vs2010.

carpeta de instalación es:

C:\Program files\Microsoft Visual Studio 10.0\Common7\Packages\Debugger\Visualizers

+0

Desafortunadamente, la ventana de SessionVisualizer es modal y no se puede anclar, ¡pero funciona! Nota: los objetos de la sesión deben ser serializables para mostrar los datos en el visor, aunque puede ver el nombre y el tipo de todos los objetos en la lista. ¡Práctico! –

2

Peter, es mejor que centralice el acceso a la sesión.

public class SessionStateBag 
{ 
    private static string SessionPropertyXKey = "SessionPropertyX"; 
    public static int SessionPropertyX 
    { 
     get { return Session[SessionPropertyXKey]; } 
     set { Session[SessionPropertyXKey] = value; } 
    } 

    private static string SessionPropertyYKey = "SessionPropertyY"; 
    public static string SessionPropertyY 
    { 
     get { return Session[SessionPropertyYKey]; } 
     set { Session[SessionPropertyYKey] = value; } 
    } 

    // etc. Try to guess the type of the session property. If you cannot guess it; use object. 
} 

En el resto del código, reemplace Sesión [ "xxx"] con una de las propiedades de SessionStateBag anteriores.

Esto podría tomarle un día o dos, pero tendrá acceso a todas las sesiones en un solo lugar y tendrá la posibilidad de tener una idea del laberinto que a veces crea el objeto Session.

+0

Gracias, pero eso no responde la pregunta. Estoy trabajando en una gran base de código heredada donde hacer esto no es práctico, ya que hay poca cobertura de prueba en su lugar. –

+0

¿Cuán grande puede ser una base de código para que find/replace no lo haga un refactor bastante simple? De acuerdo, esta no es una respuesta directa a la pregunta exacta, pero me parece que esta es una sugerencia excelente para ayudarlo a mejorar su depuración. Yo mismo trabajo en una base de código bastante grande, si el objeto de sesión fue un problema para nosotros (no lo usamos demasiado) Consideraría hacer algo como esto – DannykPowell

+0

No es el tamaño tanto como el código base no está envuelto en _any_ cobertura de prueba aún. Por ejemplo, las posibilidades de perder una clave donde se ha conjugado son demasiado altas. –

Cuestiones relacionadas