65.9K
CodeProject 正在变化。 阅读更多。
Home

在 ASP.NET 中启用 Debug.Assert

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.06/5 (9投票s)

2003 年 1 月 3 日

viewsIcon

80815

downloadIcon

1133

像在 Windows Forms 中一样,在 ASP.NET 中启用 Debug.Assert

Sample Image - DebugListener.png

引言

System.Diagnostics.Debug 提供一系列 Debug 方法,例如 Debug.AssertDebug.Fail。它们仅在 Windows.Form 应用程序下工作。在 ASP.NET 下,不会显示弹出窗口来提醒用户调试版本捕获了潜在的逻辑错误!

使用代码

编辑 ASP.NET 项目的根 web.config 文件

<configuration>
   <system.diagnostics>
      <assert assertuienabled="false" logfilename="c:\Debug.log" />
         <trace autoflush="true" indentsize="0">
            <listeners>
              <add type="AspNetDebugListener.DebugListener,AspNetDebugListener" />
            </listeners>
         </trace>
   </system.diagnostics>
</configuration>

工作原理

TraceListener 类为监视跟踪和调试输出的侦听器提供抽象基类。因此,派生一个新类来监视调试输出。

public class DebugListener : TraceListener 
{
    public DebugListener() : this("Forks Asp.Net DebugTracer")
    {
    }

过滤输出字符串

DebugListener 使用 Environment.StackTrace 打印堆栈跟踪。但它会打印出许多无用的 Debug.Assert... 调用帧,我使用过滤器来删除它

string GetStatckTraceString()
{
    string s = Environment.StackTrace;
    StringBuilder sb = new StringBuilder(s.Length);
    using (StringReader reader = new StringReader(s))
    {
        bool debugFound = false;
        for(;;)
        {
            string line = reader.ReadLine();
            if (line == null)
                break;

            if (line.IndexOf("System.Diagnostics.Debug.Assert") != -1)
            {
                debugFound = true;
                continue;
            }

            if (debugFound)
            {
                sb.Append(line);
                sb.Append(Environment.NewLine);
            }
        }
    }

    return sb.ToString();
}
© . All rights reserved.