8

我刚刚进入 Web 开发(来自 Windows 应用程序开发背景),WebMatrix 似乎是一个很好的起点,因为它很简单,而且它看起来像是通向完整 ASP.NET MVC 开发的有用垫脚石。

然而,缺乏调试工具有点伤人,尤其是在尝试学习 Web 环境中的开发基础知识时。

跟踪执行流程,并在页面上显示跟踪数据,对于绝对最低限度的调试体验来说似乎是一项相当基本的功能,但即使这样似乎也没有内置到 WebMatrix 中(或者也许我还没有找到它)。

在单个页面中设置跟踪变量很容易,然后在页面布局中显示该变量。但是,当我需要跨流中的其他页面(例如布局页面、_PageStart 页面等),甚至在页面构建过程中使用的 C# 类中跟踪执行时,这有什么帮助。

WebMatrix 中是否有我尚未找到的跟踪功能?或者,有没有办法实现一个可以在整个应用程序中工作的跟踪工具,而不仅仅是在一个页面中?即使是第三方产品 ($) 也聊胜于无。

4

3 回答 3

5

WebMatrix 的简单性(对某些人来说,它很有吸引力)的一部分是缺乏诸如调试器和跟踪工具之类的臃肿!话虽如此,我不会打赌未来版本中出现的调试器(与 Intellisense 一起)。

在 WebMatrix 中,我们有基本的“将变量打印到页面”功能,其中ServerInfoObjectInfo对象有助于将原始信息转储到前端。可以在 asp.net 站点上找到使用这些对象的快速教程:调试简介。

如果您想深入了解实际 IDE 级别的调试和跟踪,那么我建议您使用 Visual Studio(任何版本都可以正常工作,包括免费的 Express 版本)。

在 asp.net 站点上再次有一个很好的介绍:Program ASP.NET Web Pages in Visual Studio。

关键点是安装Visual Web Developer 2010 ExpressASP.NET MVC3 RTM。这也会在 WebMatrix 中为您提供一个方便的“启动 Visual Studio”按钮。不用担心,因为您仍在制作 Razor Web Pages 站点,它恰好位于 Visual Studio 中。

于 2011-02-25T04:59:39.857 回答
4

WebMatrix 的 Packages (Nuget) 区域中有一个Razor 调试器 (当前版本为 0.1)。

于 2011-02-25T05:59:14.703 回答
1

WebMatrix 通过警报/打印让人回想起经典的调试日子。不理想,但它有一定的简单性和艺术性。但是,当您的代码出现问题时,有时很难了解您的变量等等。我已经用一个简单的Debug类解决了我的大部分调试问题。

使用以下代码在 App_Code 目录中创建一个名为 Debug.cs 的文件:

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));
  }
}

这将为您提供一个名为 Debug 的静态类,它具有典型的 WriteLine 方法。然后,在您的 CSHTML 页面中,您可以新建DebugMessages对象。您可以通过.ToString()它获取调试消息。

 var debugMsg = new DebugMessages();
 try {
    // code that's failing, but calls Debug.WriteLine() with key debug info
 }
 catch (Exception ex) {
   <p>@debugMsg.ToString()</p>
 }
于 2013-01-04T15:30:55.303 回答