據我瞭解asp.net例外。如果我有一個頁面調用一些代碼,然後再調用另一個代碼。如果代碼的最後一部分(說它在一個不同的dll)拋出一個異常,並且它的處理無處不在,那麼我應該讓頁面在YSOD上拋出一個錯誤,該YSOD具有堆棧跟蹤,它以相反的時間順序顯示發生了什麼。所以我會在堆棧底部追蹤被執行的代碼的第一個位,然後在下一個位置流向頂部,發生實際錯誤。爲什麼我的堆棧跟蹤包含最初調用的頁面?
請記住,我有一個應用程序未顯示堆棧跟蹤中的aspx頁面。其也沒有顯示通常的初始呼叫到asp.net棧等:在錯誤幫助
(IntPtr的FP, 對象O,對象噸,EventArgs e)上 系統。 Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)at System.Web.UI.Control.OnLoad(EventArgs e)at Community.Support.BasePage.OnLoad(EventArgs e) C:\ Projects \ Unilever \ BinaryFiles \ Support \ BasePage.cs:line 389 at System.Web.UI.Control.LoadRecursive()at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterA同步點)
我真的不明白爲什麼。我得到的唯一提示是正在使用反射,我想知道這是爲什麼?
它取決於幾個方面......例如,如果異常發生在不同的線程上,那麼你將不會得到「調用者」,因爲它甚至不在同一個棧上發生(每個線程都有它自己的棧)! – Yahia
如果您重新拋出一個異常(或拋出一個新的異常而不保留現有堆棧在'InnerException'中),堆棧跟蹤會被重置。 – Oded
「Community.Support.BasePage」不是實際的aspx頁面嗎?或者它甚至可能是一個派生自Web.UI.Page的類;你的實際aspx頁面來自這個類。 – deostroll