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 и войти в систему с реальной учетной записью). Я использовал этот подход с несколькими клиентами, и он работает.

Другие вопросы по тегам