读书人

|M| 怎么能够自定义一个像ASP.NET出错

发布时间: 2012-02-25 10:01:48 作者: rapoo

|M| 如何能够自定义一个像ASP.NET出错时的页面 不是一般的自定义 要取出错代码
如:ASP.NET出错的时候会有说哪些代码出错:
源错误:

行 18:
行 19: Session[ "aa "] = "cc ";
行 20: Response.Write(Session[ "dd "].ToString());
行 21: }

然后现在我想自己来用一个出错日志文件
我用
System.Web.HttpContext.Current.Response.Write( "关联帮助文件: <br> " + Server.GetLastError().HelpLink);
System.Web.HttpContext.Current.Response.Write( "导常实例: <br> " + Server.GetLastError().InnerException);
System.Web.HttpContext.Current.Response.Write( "消息描述: <br> " + Server.GetLastError().Message);
System.Web.HttpContext.Current.Response.Write( "错误对像名称: <br> " + Server.GetLastError().Source);
System.Web.HttpContext.Current.Response.Write( "表示形式: <br> " + Server.GetLastError().StackTrace);
System.Web.HttpContext.Current.Response.Write( "异常方法: <br> " + Server.GetLastError().TargetSite);
这些方法,但里面没有一个是说上面的那一段代码的
那么我如何在程序里得出
行 18:
行 19: Session[ "aa "] = "cc ";
行 20: Response.Write(Session[ "dd "].ToString());
行 21: }
这些呢

谢谢

[解决办法]
1。
Server.GetLastError().StackTrace 属性就包含这个信息

2。
行 18:
行 19: Session[ "aa "] = "cc ";
行 20: Response.Write(Session[ "dd "].ToString());
行 21: }

上面的的错误信息出现在 Server.GetLastError().StackTrace 中的最顶级堆栈调用(方法调用)

假如你仔细观察、对比就会发现
[解决办法]
最顶级堆栈

====

这样理解,是调用链上抛出异常的那个方法的代码行,

StackTrace 以倒序的方式输出,最后被调用的方法出现在最上面,
[解决办法]
protected void Application_Error(object sender, EventArgs e) { Exception er = Server.GetLastError(); if (er != null) { string str = er.Message; Server.ClearError(); string Url = Request.Url.LocalPath; Response.Redirect( "~/Err.aspx?ErrMsg= " + Server.UrlEncode(str) + "&Url= " + Server.UrlEncode(Url)); } }
[解决办法]
Global.asax
[解决办法]
这是微软的工程师说的:发布出去的网站应该取不到源错误的。Exception里面也的确没有。应该是Debug的关系才会在页面上显示源错误。 < 胡文毅 在线技术支持工程师 微软全球技术支持中心
[解决办法]
哈哈,不清楚怎么回事,没有研究过
[解决办法]
行 18:
行 19: Session[ "aa "] = "cc ";
行 20: Response.Write(Session[ "dd "].ToString());
行 21: }

======

这段代码也是 ASP.NET 引擎通过获取 StactTrace 属性格式化出来的


只有 Debug 版本 CLR 才能检索到代码源文件的行号 ( line ),并附加到堆栈信息中(StackTrace)

而 Release 版本的堆栈调用信息是不包含代码源文件的行号

因为,这需要一定的性能损耗
------解决方案--------------------


肯定是只有debug才能购获取到代码行数的,因为debug编译时记录了每一条指令对应原来文件的第几行,然后ASP.NET引擎再去读取该文件并把对应的前后5行显示给你看。因此,显示这5行代码的工作也是ASP.NET做的,通过Error你最多获取到错误产生的文件和行号,之后你必须自己读取该文件并显示那5行代码。

读书人网 >asp.net

热点推荐