C# ASP.NET死亡黄屏-从哪里获取堆栈跟踪?
我在我的应用程序中设置了一个远程处理类型,在这里我避免C# ASP.NET死亡黄屏-从哪里获取堆栈跟踪?,c#,asp.net,exception,targetinvocationexception,ysod,C#,Asp.net,Exception,Targetinvocationexception,Ysod,我在我的应用程序中设置了一个远程处理类型,在这里我避免targetingException并获取内部异常。我在Exception类上调用internalPrepForRemoting方法,以保留调用方法的堆栈跟踪 这似乎可以正确构造堆栈跟踪属性: “\r\n服务器堆栈跟踪:\r\n 在ZBooking.Environment.Services.BookingService.c_中显示Class9`1.b_5(bookingslotp) C:\dev\ZBookings\core\ZZBookin
targetingException
并获取内部异常。我在Exception
类上调用internalPrepForRemoting
方法,以保留调用方法的堆栈跟踪
这似乎可以正确构造堆栈跟踪属性:
“\r\n服务器堆栈跟踪:\r\n
在ZBooking.Environment.Services.BookingService.c_中显示Class9`1.b_5(bookingslotp)
C:\dev\ZBookings\core\ZZBookings.Services\BookingService.cs:第79行\r\n
位于System.Linq.Enumerable.All[TSource](IEnumerable'1源,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]处的异常重试:\r\n在ZBookings.BookingService.c_中显示Class9`1.b_5(BookingSlot p)
C:\dev\ZBookings\core\ZBookings.Services\BookingService.cs:第79行\r\n
位于System.Linq.Enumerable.All[TSource](IEnumerable'1源,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:147中的ZBooking.ApplicationServices.MethodMarshaller.Invoke(委托del、ZipIdentity、ZipIdentity、Object[]参数)
C:\dev\ZBooking\core\ZBooking.ApplicationServices\MethodMarshaller.cs:105中的ZBooking.ApplicationServices.MethodMarshaller.Invoke(委托del、ZipIdentity、ZipIdentity、Object[]参数)
C:\dev\ZBooking\core\ZBooking.ApplicationServices\MethodMarshaller.cs中的ZBooking.ApplicationServices.MethodMarshaller.Call(Func'3 del、T1 arg1、T2 arg2、ZipIdentity-ZipIdentity)
……等等
调用
Server.GetLastError()显示正确的堆栈跟踪。黄屏堆栈跟踪从何而来?ASP.NET的死亡黄屏通过从异常构造一个来获取堆栈跟踪。它使用构造函数来实现这一点。然后,它通过遍历对象提供的对象来转储堆栈。它不使用属性。您确定没有“覆盖”第一个异常的第二个异常吗?这两个例外似乎太不一样了。你能在MethodMarshaler的第147行设置断点吗?(以及105和72)看看会发生什么?也许您可以尝试让调试器停止所有NullReferenceException。这就是重点。一个异常覆盖了另一个异常——我重新抛出正确的内部异常,然后从那里重写它的堆栈跟踪。堆栈跟踪重写工作正常,但似乎没有达到YSOD。这听起来很有希望。它似乎可以归结为内部静态外部void GetStackFramesInternal(StackFrameHelper sfh,int-iSkip,异常e)代码>调用-我将查看SSCLI,看看它调用了什么方法。同时,我认为“黄色屏幕堆栈跟踪从何而来?”这个问题已经得到了回答恐怕你剩下的里程可能会更长。