Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net中的抛出问题_Asp.net_Vb.net_Exception Handling_Log4net_Throw - Fatal编程技术网

asp.net中的抛出问题

asp.net中的抛出问题,asp.net,vb.net,exception-handling,log4net,throw,Asp.net,Vb.net,Exception Handling,Log4net,Throw,下面,为什么Throw不维护我的原始行号? 如果我运行DerivedPage,我的日志文件将错误列为第7行。 不应该写第四行吗?如果我有抛出ex,这是有道理的,但我没有。 Throw本身不是应该重新抛出并冒泡出错误吗 如果我在DerivedPage中完全删除Try…Catch块,那么我的日志文件会正确地将3列为错误行,但如果出现错误,我将无法记录任何信息 如何维护我的DerivedPage,并使日志保持正确的行号 Public Class DerivedPage Inherits BasePag

下面,为什么
Throw
不维护我的原始行号?
如果我运行DerivedPage,我的日志文件将错误列为第7行。
不应该写第四行吗?如果我有
抛出ex
,这是有道理的,但我没有。
Throw
本身不是应该重新抛出并冒泡出错误吗

如果我在DerivedPage中完全删除
Try…Catch
块,那么我的日志文件会正确地将3列为错误行,但如果出现错误,我将无法记录任何信息

如何维护我的DerivedPage,并使日志保持正确的行号

Public Class DerivedPage Inherits BasePage
 Page_Load(o,e)
   Try
      Dim a = 3 -"a"
   Catch ex As Exception
      log.Info(...)
      Throw
   End Try
End Class
主页:

Public Class BasePage
 Protected Overrides Sub OnError(e)
   MyBase.OnError(e)
   log.Error(Me.GetType(), Server.GetLastError)
 End Sub
End Class

编辑
日志。错误
会输出InnerException(如果存在)。在这种情况下确实如此。但是,InnerException的堆栈跟踪不包含行号,只包含异常详细信息。

当重新恢复异常时,原始异常详细信息存储在对象的InnerException属性中。您的所有详细信息都应该在那里。

当异常被重新释放时,原始异常详细信息存储在对象的InnerException属性中。您应该将所有详细信息都放在那里。

您可以实现一种方法,在堆栈跟踪中为您提供正确的行号:


代码是C#,但是
PreserveStackTrace
方法的代码应该相对容易移植到VB.NET。

有一种方法可以实现,它可以在堆栈跟踪中为您提供正确的行号:


代码在C#中,但是
PreserveStackTrace
方法的代码应该相对容易移植到VB.NET。

解决方案:每个解决方案两个抛出一个新异常,当前异常作为内部异常,或者使用辅助方法。

我将继续抛出一个新异常。

解决方案:每个解决方案将抛出一个新异常,当前异常作为内部异常,或者使用帮助器方法。

我将抛出一个新异常。

您检查过GetLastError返回的异常的InnerException吗?您检查过GetLastError返回的异常的InnerException吗?log4Net会打印出InnerException(如果存在)。在这种情况下确实如此。但是,InnerException堆栈跟踪不包含错误的行号。它只是给出了错误类型。@eych:您是否尝试过将日志语句更新为log.error(Me.GetType(),Server.GetLastError.InnerException)?如果InnerException存在,log4Net会打印出来。在这种情况下确实如此。但是,InnerException堆栈跟踪不包含错误的行号。它只是给出了错误类型。@eych:您是否尝试过将日志语句更新为log.error(Me.GetType(),Server.GetLastError.InnerException)?