Windows 10 Crash Whodunit

У меня есть приложение в магазине, которое вызывает у меня некоторые головные боли. Мой клиент сообщил, и я подтвердил, что приложение вылетает/закрывается в следующем сценарии:

  • Запустите приложение
  • Закрыть приложение
  • Подождите не менее ~ 15 минут.
  • Откройте приложение

Приложение закроется, когда заставка закроется, и запустится расширенный экран заставки. Неясно, что вызывает проблему. Приложение будет продолжать закрытие/сбой. Приложение должно быть полностью деинсталлировано и установлено снова, прежде чем он снова начнет работать. Я могу воспроизвести эту проблему только в версии магазина. Я не нахожу отчеты о сбоях в программе просмотра событий.

Я загрузил некоторые отчеты о сбоях с портала dev, но я не думаю, что вижу, что авария появляется на основе временных меток и частоты сбоев.

Дополнительная информация: я не выполняю никаких фоновых задач или обновлений плит.

У меня есть три вопроса:

  • Каковы хорошие места для поиска в системе, чтобы узнать больше о том, почему приложение закрывается?
  • Возможно ли, чтобы я запускал сборку хранилища в моей системе, чтобы я мог запускать некоторые тесты без необходимости отправлять приложение в хранилище каждый раз?
  • Исходя из того, что приложение 1 запускается в первый раз 2) запускается в любое последующее время при запуске в течение ~ 15 минут или предыдущий запуск 3) закрывается при запуске, когда предыдущий запуск был > 15 минут назад 4 ) это происходит только в сборке магазина, есть ли у кого-нибудь идеи, что может быть причиной этого?

UPDATE:

Я попытался отладить версию приложения для магазина с помощью Visual Studio, и все, что я вижу, следующее:

Exception thrown at 0x00007FFF54D7A1C8 (KernelBase.dll) in App.exe: 0x40080201: WinRT originate error (parameters: 0x000000008000000E, 0x000000000000002C, 0x0000006E46EAE9B0).
Exception thrown at 0x00007FFF54D7A1C8 (KernelBase.dll) in App.exe: 0x40080201: WinRT originate error (parameters: 0x000000008000000E, 0x0000000000000046, 0x0000006E46EAE630).
The thread 0x1be8 has exited with code 1 (0x1).
The thread 0xfa8 has exited with code 1 (0x1).
The thread 0x115c has exited with code 1 (0x1).
The thread 0x730 has exited with code 1 (0x1).
The thread 0xed4 has exited with code 1 (0x1).
The thread 0x1894 has exited with code 1 (0x1).
The thread 0x18a0 has exited with code 1 (0x1).
The thread 0x194c has exited with code 1 (0x1).
The thread 0x1a3c has exited with code 1 (0x1).
The thread 0x1988 has exited with code 1 (0x1).
The thread 0x16ec has exited with code 1 (0x1).
The thread 0x1584 has exited with code 1 (0x1).
The thread 0xfd0 has exited with code 1 (0x1).
The thread 0xd8c has exited with code 1 (0x1).
The thread 0xcec has exited with code 1 (0x1).
The thread 0x16b4 has exited with code 1 (0x1).
The thread 0x12f8 has exited with code 1 (0x1).
The thread 0x146c has exited with code 1 (0x1).
The thread 0x36c has exited with code 1 (0x1).
The thread 0x1854 has exited with code 1 (0x1).
The thread 0x1ae4 has exited with code 1 (0x1).
The thread 0xa38 has exited with code 1 (0x1).
The thread 0x230 has exited with code 1 (0x1).
The program '[3840] App.exe' has exited with code 1 (0x1).

Я думаю, что программы обычно выходят с кодом 0, поэтому что-то должно быть неправильно. Трудно понять, что такое заброшенное исключение.

Я попытался сломать исключение и перешагнуть, чтобы увидеть, что вызывает его, но все, что я получил, было еще одним исключением:

Exception thrown at 0x00007FFF54D7A1C8 in App.exe: Microsoft C++ exception: _com_error at memory location 0x000000EE2788E9D0.

Я загрузил версию приложения в магазин со встроенным пасхальным яйцом, позволяя мне отключить весь код в расширенном заставке. Даже весь код отключен, он все еще сбой/закрывается.

ОБНОВЛЕНИЕ 2: Временной интервал, после которого приложение начинает закрываться при запуске, похоже, связано со временем, когда система переходит в спящий режим/спящий режим.

Ответ 1

Я предполагаю, что это может иметь какое-то отношение к жизненному циклу приложения.

После приостановки вашего приложения пользователь может потерять из-за ограничений ресурсов. Когда это произойдет, предыдущие данные сеанса в вашем приложении будут потеряны. Поэтому, если у вас нет каких-либо проверок для восстановления данных, и если ваш запуск приложения зависит от этих данных, приложение выйдет из строя и даст вам, например, NullReferenceException s.

Один из способов отладить это - использовать отладчик Visual Studio Lifecycle Events. Чтобы активировать его, вам нужно запустить приложение, а затем открыть события жизненного цикла на панели задач (см. Рисунок ниже) и выбрать "Приостановка и выключение". Обратите внимание, что это приведет к закрытию приложения. Теперь запустите приложение с помощью Visual Studio, и в этот раз он запускается из режима "Завершение".

введите описание изображения здесь

Обычно в вашем App.xaml.cs вы увидите следующий фрагмент кода. Это хорошее место для восстановления вашего предыдущего состояния приложения. Хорошую ссылку можно найти здесь (обратите внимание, что это приложение для Windows 8, но это та же концепция в UWP).

if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
{
    //TODO: Load state from previously suspended application
}

Кроме того, я настоятельно рекомендую вам писать свои исключения в файл журнала и либо хранить его на сервере, либо вежливо попросить пользователей отправить его вам по электронной почте. Поскольку авария происходит на переднем плане приложения, вы сможете ее поймать -

public App()
{
    this.UnhandledException += (s, e) => { };

Надеюсь, это поможет и удачи!

Ответ 2

Оказалось, что это вопрос времени. Код делал что-то плохое (тип, переводящий переменную в неправильный вид) в код резюме. Причина, по которой это не происходило в сборке отладки, заключалась в том, что медленнее было получить код резюме. К тому времени, как он попал в этот код, эта ошибка при выдаче такого типа не возникнет. Это произошло в сборке хранилища, но незаконное исключение литья не было захвачено HockeyApp или средством просмотра событий Windows каким-то образом.

Ответ 3

Это приложение для магазина Windows8.1 перенастроено на Windows 10?

  • Вы можете использовать средство просмотра событий, чтобы проверять информацию об авариях приложений или любом другом журнале системных событий. Просто найдите средство просмотра событий в W10.

  • Создайте пакет приложений для магазина с помощью мастера. Поскольку Windows 10 позволяет загружать бонусные приложения, вы можете устанавливать и тестировать приложения, используя боковую загрузку. Режим разработчика также поддерживает загруженные приложениями. Вам просто нужно установить .appx со своим сертификатом для боковой загрузки. https://msdn.microsoft.com/en-us/library/windows/apps/dn706236.aspx

  • Можете ли вы поделиться более подробными сведениями, которые вы получаете из ведения журнала? Каковы используемые возможности? Также предлагайте использовать телеметрию Application Insights для упрощения отчетов об ошибках/ошибках.