2017-02-10 5 views
1

Я играю с Application Insights (AI), чтобы попытаться посмотреть, могу ли я регистрировать и просматривать исключения, созданные моим приложением.Исключение MVC в Application Insight скрывает трассировку стека

Я следил за this guide, чтобы установить новый проект MVC, связанный с новым ресурсом AI в Azure для целей тестирования. Все работает очень хорошо.

После того, как я прочитал следующее руководство по адресу Diagnose failures & exceptions, я создал новый метод действий, в котором я запускаю NullReferenceException. Мне очень нравится, как эти телеметрические данные отправляются в ИИ. При отладке приложения я могу просмотреть исключение, созданное в Visual Studio внутри окна поиска приложений. Это дает мне следующее StackTrace:

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 Portal я получаю эту StackTrace:

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) 

Вы можете наблюдать, что последний призыв в StackTrace отсутствует. Зачем?
Исключение, созданное при отладке локально, также присутствует на Azure Portal, однако этот не отсутствует, что последний звонок. Смотрите этот скриншот:

enter image description here

Дополнительный вопрос: что же Anonymously Hosted DynamicMethods Assembly представляют в StackTrace и почему он там?

ответ

1

При публикации вы, вероятно, публикуете конфигурацию выпуска (по умолчанию), поэтому оптимизация кода включена. Вы можете либо переключиться на публикацию отладки (это повлияет на производительность), либо отключить некоторые оптимизации кода в режиме выпуска (более here), если вы готовы отказаться от них.