2017-02-10 101 views
1

我在玩Application Insights(AI)以試圖查看我是否可以記錄和查看由我的應用程序拋出的異常。Application Insight中的MVC異常隱藏堆棧跟蹤

我跟着this guide設置了一個新的與Azure中的新AI資源相關聯的MVC項目,用於測試目的。一切工作都很好。

在閱讀了Diagnose failures & exceptions的以下指南之後,我創建了一個新的操作方法,我觸發了NullReferenceException。我真的很喜歡這種遙測數據是如何發送給AI的。在調試應用程序時,我可以在Application Insights Search窗口中查看Visual Studio中拋出的異常。它給了我下面的棧跟蹤:

System.NullReferenceException: Object reference not set to an instance of an object. 
    at WebApplicationInsights.Controllers.HomeController.Error (HomeController.cs:33) (WebApplicationInsights, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null) 
    at lambda_method (Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute (System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35) 
    . 
    . 
    at System.Web.HttpApplication.ExecuteStep (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) 

正如你所看到的,從HomeController引發異常。

現在在發佈到Azure之後,我通過訪問live網站再次提出了此異常。檢查異常的Azure的門戶網站我得到這個堆棧跟蹤:

System.NullReferenceException: 
    at lambda_method (Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute (System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35) 
    . 
    . 
    at System.Web.HttpApplication.ExecuteStep (System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a) 

你可以觀察到,在堆棧跟蹤最後一次通話丟失。爲什麼?
在本地調試時拋出的異常也出現在Azure門戶中,但是這一個是而不是,因此最後一次調用失敗。看到這個截圖:

enter image description here

其他問題:什麼Anonymously Hosted DynamicMethods Assembly代表的堆棧跟蹤,爲什麼它呢?

回答

1

當您發佈時,您可能正在發佈發佈配置(默認),以便啓用代碼優化。您可以切換到發佈調試(這會影響性能),也可以在發佈模式下禁用一些代碼優化(更多here),如果您願意放棄它們。