Win 8.1 App вылетает на пользовательском устройстве - Как отлаживать?
На прошлой неделе я опубликовал свое первое приложение для Windows 8.1 в Магазине Windows. Пока все работает нормально, но теперь два пользователя сообщили, что приложение сразу запускается при запуске.
Кроме того, я обнаружил, что в разделе "Отчеты / качество" панели мониторинга есть CrashDump. Я загрузил CrashDump и попытался найти источник проблемы с помощью WinDbg, следуя этой инструкции: http://blogs.msdn.com/b/ntdebugging/archive/2014/01/13/debugging-a-windows-8-1-store-app-crash-dump.aspx
Я был в состоянии следовать инструкции почти до конца, но тогда библиотека sos не найдена:
0:006> .sympath SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols
...
0:006> .exr -1
ExceptionAddress: 769eb1d7 (combase+0x000fb1d7)
ExceptionCode: c000027b
ExceptionFlags: 00000001
NumberParameters: 2
Parameter[0]: 03f3f32c
Parameter[1]: 00000001
0:006> !error c000027b
Error code: (NTSTATUS) 0xc000027b (3221226107) - Anwendungsinterne Ausnahme.
0:006> .ecxr
eax=03f3f030 ebx=00000000 ecx=00000000 edx=00000000
esi=03f3f360 edi=03f3f030 eip=769eb01f esp=03f3f314
ebp=03f3f3bc iopl=0 nv up ei pl nz ac po nc cs=001b
ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000212
combase+0xfb01f: 769eb01f 6a03 push 3
0:006> knL
*** Stack trace for last set context - .thread/.cxr resets it
...
0:006> dt 03f3f32c combase!_STOWED_EXCEPTION_INFORMATION_HEADER*
0x05f182e4
+0x000 Size : 0x28
+0x004 Signature : 0x53453032
0:006> .formats 0x53453032
Evaluate expression:
Hex: 53453032
Decimal: 1397043250
Octal: 12321230062
Binary: 01010011 01000101 00110000 00110010
Chars: SE02
Time: Wed Apr 09 13:34:10 2014
Float: low 8.46917e+011 high 0
Double: 6.90231e-315
0:006> dt -a1 03f3f32c combase!_STOWED_EXCEPTION_INFORMATION_V2*
[0] @ 03f3f32
---------------------------------------------
0x05f182e4
+0x000 Header : _STOWED_EXCEPTION_INFORMATION_HEADER
+0x008 ResultCode : 80131500
+0x00c ExceptionForm : 0y01
+0x00c ThreadId : 0y000000000000000000010001100101 (0x465)
+0x010 ExceptionAddress : 0x76943bff Void
+0x014 StackTraceWordSize : 4
+0x018 StackTraceWords : 0xa
+0x01c StackTrace : 0x04c6c010 Void
+0x010 ErrorText : 0x76943bff "趍ﯰ???" +0x
+0x020 NestedExceptionType : 0x314f454c
+0x024 NestedException : 0x05f1be44 Void
0:006> !error 80131500
Error code: (HRESULT) 0x80131500 (2148734208) - <Unable to get error code text>
0:006> dpS 0x04c6c010 La 7697a9f1 combase!RoOriginateLanguageException+0x3b [d:\blue_gdr\com\combase\winrt\error\error.cpp @ 1083]
63da3bc6 mscorlib_ni+0x9b3bc6
63e41976 mscorlib_ni+0xa51976
63e415c1 mscorlib_ni+0xa515c1
5b72f9df System_Runtime_WindowsRuntime_ni+0x1f9df
5b72f965 System_Runtime_WindowsRuntime_ni+0x1f965
6372de66 mscorlib_ni+0x33de66
5b72f934 System_Runtime_WindowsRuntime_ni+0x1f934
5b6bff16 Windows_UI_ni+0x9ff16
64492a36 clr!COMToCLRDispatchHelper+0x28
0:006> !sos.pe
The call to LoadLibrary(sos) failed, Win32 error 0n2
"The system cannot find the file specified."
Please check your debugger configuration and/or network access.
0:006> .loadby sos clr
The call to LoadLibrary(c:\symbols\clr.dll\52E0B78469b000\sos) failed, Win32 error 0n126
"The system cannot find the file specified."
Please check your debugger configuration and/or network access.
У меня нет опыта работы с такого рода отладкой, и без инструкции я бы не знал ни одной из команд, которые мне приходилось использовать в WinDbg.
У кого-нибудь есть идеи как дальше отсюда?
Я загрузил CrashDump на мой OneDrive. Было бы здорово, если бы кто-то с большим опытом мог взглянуть на это: http://1drv.ms/1gZzrRK
Можно ли каким-то образом получить дополнительную информацию от пользователей, которые сообщили о сбое в службу поддержки? Могут ли они извлечь аварийный дамп / отчет об ошибках из своих систем?
Есть ли возможность предоставить измененную версию этим пользователям, чтобы проверить, влияют ли эти изменения на проблему?
Большое спасибо!
1 ответ
Чтобы получить более полное представление о том, что делает ваше приложение, когда оно работает на устройствах пользователей, вы можете добавить какое-либо ведение журнала. Локальное ведение журнала в файл - вариант, но плохой, так как вы должны позволить своему пользователю копаться в скрытых файлах, чтобы получить журнал приложения. Это может быть приемлемо, хотя, в зависимости от вашего сценария. В этом случае вы, возможно, захотите посмотреть этот пример регистрации для приложений Магазина Windows, которые используют EWT для регистрации.
Альтернативы будут использовать какую-то каркас регистрации. У меня нет опыта ни в одном из них, поэтому я не могу сказать вам, какой из них использовать.
Что касается получения измененной версии для вашего пользователя: просто создайте пакет приложения локально, поместите его в OneDrive и отправьте ему ссылку на него. Они могут сами загружать приложение (хотя для этого требуется запустить скрипт Powershell и войти в систему с реальной учетной записью). Я использовал этот подход с несколькими клиентами, и он работает.