Знаете, я должен, вероятно, отдать должное Microsoft за фактическую реализацию коллекции трассировки стека от сбоев приложения UWP. Я столкнулся с фактическим сбоем в приложении Windows Store Win32/UWP, и вот как я смог использовать его, чтобы найти скрытую ошибку.
Во-первых, когда вы войти в свой dashboard, проверьте листинг приложения и посмотреть, если есть какие-либо сбои:
Если да, то нажмите на эту номер/ссылку и прокрутите весь путь вниз где он детализирует Failures
. В моем случае это была ошибка, которая выглядит следующим образом:
Нажмите ее, что приведет еще одно окно. Прокрутите вниз до Failure Log
:
Он покажет вам, когда авария прошла, версия вашего приложения, какое устройство это произошло в (! Что очень приятно), а затем ссылку на стек след. Так нажмите кнопку:
Вот как мои фактические трассировки стеки выглядели в момент аварии. Поскольку компьютер этого человека не имел символов (.pdb
файл) с моим исполняемым файлом, все методы в моем приложении отображаются как пустые смещения.
Вот как найти фактическое местонахождение аварии:
Восстановления визуального решения Студии с точной копией разбитых файлов. (Я предполагаю, что вы архивируетесь в release
сборке вашего решения вместе с .exe
и .pdb
файлами перед загрузкой в Windows Store.)
Запустите Visual Studio откройте версию разбитого приложения, переключиться на Release
конфигурации и disable builds. (Эта часть важна, потому что в противном случае Visual Studio попытается создать ваш проект, прежде чем вы начнете отлаживать его, что может испортить ваши смещения функций, которые вы получили из трассировки стека!)
Затем поместите контрольную точку где-нибудь в одном из первые конструкторы, которые будут немедленно загружаться с вашим приложением. Вы должны убедиться, что он срабатывает перед сбоем.
Запустите отладку (нажмите F5
) и дождитесь, пока точка останова ударит. Затем покажите Modules
панель (Ctrl
+ Alt
+ U
) и найдите исполняемый файл и получить его базовый адрес:
В моем случае это было 0xD0000
. Затем переключитесь на разборку (Alt
+ 8
) и введите свой базовый адрес + смещение сбоя из трассировки стека выше в баре Address
поверх окна разборки.Это мое дело было:
0xD0000+0x1D500
и нажмите Enter
для отображения местоположения в коде. Это покажет вам, где произошел сбой. В моем случае это была эта линия:
Тогда все зависит от ваших навыков отладки. В моем случае это было довольно легко увидеть - индекс nRow
был вне пределов. Так что было довольно тривиально исправить эту ошибку.
Опять же, я хочу выразить благодарность Microsoft за предоставление такой функции. Я не знал об ошибке, которую я показал выше, и мне было бы трудно, если бы я пытался обнаружить, что выйдет из строя приложением только после простого отчета конечного пользователя.
PS. Наконец, я думаю, что причина, по которой моя трассировка стека не была собрана в моем первом примере, заключалась в том, что приложение было повешено. Поэтому в этом случае отладочная информация, вероятно, не собирается. (Просто догадайтесь на этот момент.)
@CheeryBu: Ну, если бы у меня был отладчик, работающий на этой машине, мне не нужно было бы сохранять файл дампа. Я спрашиваю о ситуации, когда мое приложение падает на машине конечного пользователя. Может ли Windows Store собирать аварийные дампы из приложений UWP, которые я могу получить в этом случае? – c00000fd
@ c00000fd, я думаю, что вы можете не получить файл дампов из панели инструментов Dev Dev Center напрямую, если вам это нужно, сообщите об этом [обратная связь] (https://www.microsoft.com/en-us/store/p/ feedback-hub/9nblggh4r32n) в Microsoft. Благодарю. –