我正在玩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门户中,但是这个异常不缺少最后一次调用。见这个截图:
其他问题: Anonymously Hosted DynamicMethods Assembly
在堆栈跟踪中代表什么,为什么会出现?
答案 0 :(得分:1)
发布时,您可能正在发布发布配置(默认),因此启用了代码优化。您可以切换到发布调试(这会影响性能)或者在发布模式下禁用某些代码优化(更多here),如果您愿意放弃它们。