Application Insight中的MVC异常隐藏堆栈跟踪

时间:2017-02-10 17:46:56

标签: asp.net azure azure-application-insights

我正在玩Application Insights(AI)来尝试查看我是否可以记录并查看我的应用程序抛出的异常。

我跟着this guide设置了一个新的MVC项目,该项目链接到Azure中的新AI资源以进行测试。一切都很好。

在我阅读了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 个答案:

答案 0 :(得分:1)

发布时,您可能正在发布发布配置(默认),因此启用了代码优化。您可以切换到发布调试(这会影响性能)或者在发布模式下禁用某些代码优化(更多here),如果您愿意放弃它们。