2011-02-25 12 views
8

Acabo de comenzar el desarrollo web (desde un fondo de desarrollo de aplicaciones de Windows), y WebMatrix parece un buen lugar para comenzar, debido a su simplicidad, y también porque parece un trampolín útil hacia el desarrollo completo de ASP.NET MVC .¿Cómo depurar y/o rastrear el flujo de ejecución en WebMatrix?

Sin embargo, la falta de herramientas de depuración duele un poco, especialmente al tratar de aprender los fundamentos del desarrollo en el entorno web.

Rastrear el flujo de ejecución, y mostrar los datos de rastreo en la página, parece una capacidad bastante básica para una experiencia de depuración mínima absoluta, pero incluso eso no parece estar integrado en WebMatrix (o tal vez no lo haya logrado) lo encontré todavía).

Es fácil en una sola página establecer una variable de seguimiento, y luego mostrar esa variable en el diseño de la página. Pero, ¿cómo ayuda eso cuando necesito rastrear la ejecución en otras páginas del flujo (por ejemplo, páginas de diseño, páginas de páginas de inicio de página, etc.) e incluso dentro de mis clases de C# utilizadas durante el proceso de creación de páginas?

¿Existe alguna función de rastreo dentro de WebMatrix que aún no haya encontrado? O, alternativamente, ¿hay alguna manera de implementar un recurso de rastreo que funcione en toda la aplicación, y no solo en una sola página? Incluso un producto de terceros ($) sería mejor que nada.

Respuesta

5

Parte de la simplicidad de WebMatrix (y para algunos, es atractivo) es la falta de hinchazón, como depuradores y herramientas de rastreo. Habiendo dicho eso, no apostaría contra un depurador que aparezca en una versión futura (junto con Intellisense).

Dentro de WebMatrix tenemos las capacidades básicas de 'imprimir las variables de la página' con los objetos ServerInfo y ObjectInfo que ayudan a volcar información sin procesar al frontend. Puede encontrar un tutorial rápido para usar estos objetos en el sitio asp.net: Introduction to Debugging.

Si desea profundizar con la depuración y el rastreo del nivel IDE real, le sugiero que use Visual Studio (cualquier versión funcionará bien, incluyendo la edición Express gratis).

Una vez más hay una excelente introducción a hacer esto en el sitio asp.net: Program ASP.NET Web Pages in Visual Studio.

Los puntos clave son la instalación de Visual Web Developer 2010 Express y ASP.NET MVC3 RTM. Esto le dará un práctico botón 'Iniciar Visual Studio' en WebMatrix también. No se preocupe porque todavía está creando sitios Razor Web Pages, simplemente está en Visual Studio.

4

Hay un Razor Debugger (actualmente en la versión 0.1) en el área de Paquetes (Nuget) dentro de WebMatrix.

+0

Parece un poco mejor de una respuesta, teniendo en cuenta el medio ambiente. – VoidKing

1

WebMatrix se remonta a los días clásicos de la depuración a través de alertas/impresión. No es ideal, pero hay cierta simplicidad y arte en ello. Pero a veces es difícil conocer sus variables y otras cosas cuando tiene un problema en su código. He resuelto la mayoría de mis problemas de depuración con una clase simple Debug.

hacer un archivo llamado Debug.cs en su directorio App_Code con el siguiente código:

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Text; 

public class TextWrittenEventArgs : EventArgs { 
    public string Text { get; private set; } 
    public TextWrittenEventArgs(string text) { 
     this.Text = text; 
    } 
} 

public class DebugMessages { 
    StringBuilder _debugBuffer = new StringBuilder(); 

    public DebugMessages() { 
    Debug.OnWrite += delegate(object sender, TextWrittenEventArgs e) { _debugBuffer.Append(e.Text); }; 
    } 

    public override string ToString() { 
    return _debugBuffer.ToString(); 
    } 
} 

public static class Debug { 
    public delegate void OnWriteEventHandler(object sender, TextWrittenEventArgs e); 
    public static event OnWriteEventHandler OnWrite; 

    public static void Write(string text) { 
    TextWritten(text); 
    } 

    public static void WriteLine(string text) { 
    TextWritten(text + System.Environment.NewLine); 
    } 

    public static void Write(string text, params object[] args) { 
    text = (args != null ? String.Format(text, args) : text); 
    TextWritten(text); 
    } 

    public static void WriteLine(string text, params object[] args) { 
    text = (args != null ? String.Format(text, args) : text) + System.Environment.NewLine; 
    TextWritten(text); 
    } 

    private static void TextWritten(string text) { 
    if (OnWrite != null) OnWrite(null, new TextWrittenEventArgs(text)); 
    } 
} 

esto le dará una clase estática llamada de depuración, que tiene su método WriteLine típico. Luego, en sus páginas CSHTML, puede renovar el objeto DebugMessages.Puede .ToString() para recibir mensajes de depuración.

var debugMsg = new DebugMessages(); 
try { 
    // code that's failing, but calls Debug.WriteLine() with key debug info 
} 
catch (Exception ex) { 
    <p>@debugMsg.ToString()</p> 
} 
Cuestiones relacionadas