ASP.NET死黄色屏幕 - 它从哪里获得堆栈跟踪?

时间:2011-03-17 14:27:13

标签: c# asp.net exception targetinvocationexception ysod

我在我的应用程序中设置了远程类型,我避免使用TargetInvocationExceptions并获取内部异常。我在PrepForRemoting类上调用内部Exception方法,以保留调用方法的堆栈跟踪。

这似乎正确构造了堆栈跟踪属性:

  

“\ r \ n服务器堆栈跟踪:\ r \ n

     

在ZBooking.Environment.Services.BookingService。<> c_ DisplayClass9`1.b _5(BookingSlot p)in   C:\ dev \ ZBookings \ core \ ZZBookings.Services \ BookingService.cs:第79行\ r \ n

     

在System.Linq.Enumerable.All [TSource](IEnumerable'1 source,Func'2谓词)\ r \ n

     

在ZBookings.BookingService.MoveBooking [TBookingType](Int32 bookingId,> IEnumerable`1 bookingSlots)中   C:\ dev \ ZBooking.Client \ core \ ZBookings.Services \ BookingService.cs:第79行\ r \ n \ r \ n

     

在[0]处重新抛出异常:\ n \ r \ n在ZBookings.BookingService。<> c_ DisplayClass9`1.b _5(BookingSlot p)in   C:\ dev \ ZBookings \ core \ ZBookings.Services \ BookingService.cs:第79行\ r \ n

     

在System.Linq.Enumerable.All [TSource](IEnumerable'1 source,Func'2谓词)\ r \ n

     

在ZBookings.BookingService.MoveBooking [TBookingType](Int32 bookingId,IEnumerable`1 bookingSlots)中   C:\ dev \ ZBookings \ core \ ZBookings.Services \ BookingService.cs:第79行“

但是,当标准ASP.NET黄色屏幕显示时,它是:

  

[NullReferenceException:对象引用未设置为对象的实例。]      C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller.cs中的ZBooking.ApplicationServices.MethodMarshaller.Invoke(Delegate del,ZipIdentity zipIdentity,Object [] args):147      C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller.cs中的ZBooking.ApplicationServices.MethodMarshaller.Invoke(Delegate del,ZipIdentity zipIdentity,Object [] args):105      ZBooking.ApplicationServices.MethodMarshaller.Call(Func'3 del,T1 arg1,T2 arg2,ZipIdentity zipIdentity)在C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller.cs:72
  ...等

在Global.asax中调用Application_Error上的Server.GetLastError();显示正确的堆栈跟踪。黄色屏幕堆栈的痕迹来自哪里?

1 个答案:

答案 0 :(得分:7)

ASP.NET的黄色死亡屏幕通过从异常中构造StackTrace来获取堆栈跟踪。它使用StackTrace(Exception, Boolean)构造函数执行此操作。然后它通过遍历StackFrame对象提供的StackTrace对象来转储堆栈。它不使用Exception.StackTrace属性。