2011-03-17 42 views
6

我有一個遠程處理類型設置在我的應用程序,我避免TargetInvocationExceptions並搶內部例外。我調用Exception類的內部PrepForRemoting方法來保存調用方法的堆棧跟蹤。ASP.NET的黃色死亡屏幕 - 它從哪裏得到堆棧跟蹤?

這似乎正確地構造堆棧跟蹤屬性:

「\ r \ n服務器堆棧跟蹤:\ r \ n

在ZBooking.Environment.Services.BookingService <> C_ DisplayClass9 `1.B _5(BookingSlot p)在 C:\ dev的\ ZBookings \芯\ 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 \芯\ ZBookings.Services \ BookingService.cs:線79 \ r \ n \ r \ n

在ZBookings.BookingService處重新排列在[0]處的異常:\ r \ n。 <> C_ DisplayClass9`1.b _5(BookingSlot P)在 C:\ dev的\ ZBookings \芯\ ZBookings.Services \ BookingService.cs:線79 \ r \ n

在System.Linq.Enumerable 。所有[TSource](IEnumerable'1源,Func'2謂詞個)\ r \ n

在ZBookings.BookingService.MoveBooking [TBookingType](的Int32 bookingId,IEnumerable`1 bookingSlots)在 C:\ dev的\ ZBookings \ core \ ZBookings.Services \ BookingService.cs:line 79「

但是,當這個由標準的ASP.NET顯示的時候llow屏幕,它是:

[NullReferenceException異常:對象沒有設置爲一個對象的一個​​實例。] ZBooking.ApplicationServices.MethodMarshaller.Invoke(代表德爾,ZipIdentity zipIdentity,對象[]參數)在C:\在C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller中使用ZBooking.ApplicationServices.MethodMarshaller.Invoke(Delegate del,ZipIdentity zipIdentity,Object [] args)在C:\ dev \ ZBooking \ core \ ZBooking.ApplicationServices \ MethodMarshaller.cs:72
.cs:105 ZBooking.ApplicationServices.MethodMarshaller.Call(Func'3 del,T1 arg1,T2 arg2,ZipIdentity zipIdentity) 。等等。

在Global.asax中調用Server.GetLastError(); Application_Error顯示正確的堆棧跟蹤。黃色屏幕堆棧跟蹤來自哪裏?

+0

你確定你沒有第二個例外「覆蓋」第一個嗎?這兩個例外似乎有太大的不同。你可以在MethodMarshaler的第147行放置一個斷點嗎? (105和72),看看會發生什麼?也許你可以試着讓調試器停止所有的Nu​​llReferenceException。 – xanatos 2011-03-22 13:12:01

+0

這點很重要。一個例外是覆蓋另一個 - 我重新拋出正確的內部異常,然後從那裏重寫它的堆棧跟蹤。堆棧跟蹤重新寫入,但似乎沒有起泡到YSOD。 – 2011-03-28 17:32:48

回答

6

ASP.NET的死亡黃色屏幕通過從異常中構建StackTrace來獲取堆棧跟蹤。它使用StackTrace(Exception, Boolean)構造函數完成此操作。然後通過步行StackTrace對象提供的StackFrame對象來轉儲堆棧。它不使用Exception.StackTrace屬性。

+0

這聽起來很有希望。它似乎歸結爲內部靜態外部無效GetStackFramesInternal(StackFrameHelper sfh,int iSkip,異常e);'調用 - 我會看看SSCLI看看它調用什麼方法。 – 2011-04-01 08:34:19

+0

與此同時,我認爲這個問題,「黃色屏幕堆棧跟蹤來自哪裏?」已被回答。 ;)恐怕,你的剩餘里程可能會更長。 – 2011-04-01 09:38:35

+0

需要採取的措施 - 回答:) – 2011-04-01 10:23:42

相關問題