Попытка отладки приложения Магазина Windows из файлов дампа
Позвольте мне начать с моих основных вопросов, затем ниже я добавлю некоторые особенности и историю. Я провел исследование, но, похоже, не могу соединить все вместе. Пожалуйста, попросите разъяснений, прежде чем голосовать против меня.
Мои вопросы:
Почему мое приложение Windows Store запускается и корректно запускается локально на моем Win 8.1 64-битном И моем Win 8.1 32-битном (Atom) планшете, но не запускается для других пользователей?
Когда я получаю файл дампа после сбоя сертификации Windows Store, как я могу заставить символы отладки работать, чтобы я мог видеть больше проблемы?
Когда я создаю режим "Release", он помещает символы в файлы.pdb? И это индексирует символы?
Вот история:
Я разработал небольшую игру в качестве универсального приложения, Win Phone и Windows Store. Версия Win Phone находится в магазине, загружается и работает нормально.
В версии Магазина Windows возникают проблемы.
Он работает на моей машине, Win 8.1 64bit. Он работает на моем планшете, Win 8.1 Atom, который я устанавливаю через Remote Debug из Visual Studio. Он проходит сертификацию приложения здесь, на моей коробке. Но когда я отправляю пакет в Магазин Windows, он не проходит, и в отчете говорится, что он падает при запуске. (Каким-то образом первый пакет appx был выпущен в магазине, а затем они ответили, что он вылетает, поэтому некоторые пользователи говорят, что приложение не загружается.)
Итак, я загружаю данные отладки и открываю файл.dmp. Я получаю код исключения 0xC000027B
Покопавшись в Интернете, я обнаружил, что это "исключение языка", и это общая ошибка, которая говорит о том, что ошибка была необработанной. Следующие статьи, подобные этой ( http://blogs.msdn.com/b/ntdebugging/archive/2014/01/13/debugging-a-windows-8-1-store-app-crash-dump.aspx)
Я пытаюсь получить символы для своего приложения, чтобы загрузить, чтобы видеть, поможет ли это. Я добавил папку для своего приложения в папку локального кэша символов (c:\symbols\myApp\1.3.0.7), думая, что Visual Studio их подберет, и скопировал файлы.exe, .dll и.pdb из пакета apx. что я отправил в магазин, но все равно получаю эти сообщения:
'WER38D7.tmp.dmp' (Minidump): загружен '*CryptoQuoteW8cs.exe'. Модуль был построен без символов.
'WER38D7.tmp.dmp' (CLR v4.0.30319:): загружен '*CryptoQuoteW8cs.exe'. Соответствующий бинарный файл не найден.
'WER38D7.tmp.dmp' (CLR v4.0.30319:): загружен '*CryptoLogic.DLL'. Соответствующий бинарный файл не найден.
Роковое исключение было обнаружено средой выполнения. Посмотрите $stowedexception в окне Watch для просмотра оригинальной информации об исключении.
Итак, я в растерянности. Как мне заставить мое приложение работать? Какая ошибка задерживает? Почему он работает и проходит сертификацию локально, а не в магазине? Как я могу узнать? Я был по всему Bing и Microsoft, и, возможно, я просто не ищу нужную вещь. Пожалуйста помоги!
Редактировать:
Из пустозвона я получаю этот стек вызовов.
combase!RoFailFastWithErrorContextInternal2(HRESULT hrError = 0xaaaaaaaa, unsigned long cStowedExceptions = 0xaaaaaaaa, struct _STOWED_EXCEPTION_INFORMATION_V2 ** aStowedExceptionPointers = 0xaaaaaaaa)+0x10a [d:\blue_gdr\com\combase\winrt\error\error.cpp @ 1035]
combase!RoFailFastWithErrorContextInternal(HRESULT hrError = 0xaaaaaaaa, unsigned long cStowedExceptions = 0xaaaaaaaa, struct _STOWED_EXCEPTION_INFORMATION_V1 ** aStowedExceptionPointers = 0xaaaaaaaa)+0x10b [d:\blue_gdr\com\combase\winrt\error\error.cpp @ 948]
kernel32!BaseThreadInitThunk+0xe
ntdll!__RtlUserThreadStart+0x20
ntdll!_RtlUserThreadStart+0x1b
1 ответ
Хорошо, с помощью Windbg Extension PDE.dll от Эндрю Ричардса я вижу, что ваше приложение вылетает из-за необработанного исключения System.UnauthorizedAccessException.
я использовал !PDE.dpx -dse
чтобы показать все Stowed Exception (те исключения 0xC000027B):
0:006> !PDE.dpx -dse
Start memory scan : 0x0551fc7c ($csp)
End memory scan : 0x05520000 (User Stack Base)
0x0551fc94 : 0x012db914 : !dse combase!STOWED_EXCEPTION_INFORMATION_V1
0x0551fcdc : 0x0163c168 : !dse combase!STOWED_EXCEPTION_INFORMATION_V1
Теперь я использую!PDE.dse для отображения своих данных:
0:006> !PDE.dse 0551fc94
Stowed Exception Array @ 0x0551fc94
Stowed Exception #1 @ 0x012db914
0x80070005 (FACILITY_WIN32 - Win32 Undecorated Error Codes): E_ACCESSDENIED - General access denied error
Stack : 0x163c528
770ba9f1 combase!RoOriginateLanguageException+0x3b
6f137872 clr!SetupErrorInfo+0x1e1
6f1fbc91 clr!MarshalNative::GetHRForException_WinRT+0x7d
>>> Associated CLR Exception <<<
Exception object: 02b424f8
Exception type: System.UnauthorizedAccessException
Message: <Invalid Object>
InnerException: <none>
StackTrace (generated):
SP IP Function
00000000 00000001 UNKNOWN!UNKNOWN+0x2
0551FC58 015702E9 CryptoQuoteW8cs!UNKNOWN+0x81
0551FC6C 01570251 CryptoQuoteW8cs!UNKNOWN+0x11
StackTraceString: <none>
HResult: 80070005
0:006> !PDE.dse 0163c168
Stowed Exception Array @ 0x0163c168
Stowed Exception #1 @ 0x012db914
0x80070005 (FACILITY_WIN32 - Win32 Undecorated Error Codes): E_ACCESSDENIED - General access denied error
Stack : 0x163c528
770ba9f1 combase!RoOriginateLanguageException+0x3b
6f137872 clr!SetupErrorInfo+0x1e1
6f1fbc91 clr!MarshalNative::GetHRForException_WinRT+0x7d
>>> Associated CLR Exception <<<
Exception object: 02b424f8
Exception type: System.UnauthorizedAccessException
Message: <Invalid Object>
InnerException: <none>
StackTrace (generated):
SP IP Function
00000000 00000001 UNKNOWN!UNKNOWN+0x2
0551FC58 015702E9 CryptoQuoteW8cs!UNKNOWN+0x81
0551FC6C 01570251 CryptoQuoteW8cs!UNKNOWN+0x11
StackTraceString: <none>
HResult: 80070005
Stowed Exception #2 @ 0x01639748
0x80070005 (FACILITY_WIN32 - Win32 Undecorated Error Codes): E_ACCESSDENIED - General access denied error
Stack : 0x69d29c4
6d33bd5e Windows_UI_Xaml!DirectUI::Application::MainASTAInitialize+0xa9
6d33bb05 Windows_UI_Xaml!DirectUI::FrameworkView::Initialize+0x5a
6dc5a597 twinapi_appcore!Windows::ApplicationModel::Core::CoreApplicationView::CreateAndInitializeFrameworkView+0xa7
6dc5a6eb twinapi_appcore!Windows::ApplicationModel::Core::CoreApplicationView::CreateAndInitializeFrameworkView+0x1fb
74b2a83a SHCore!Microsoft::WRL::RuntimeClass<Microsoft::WRL::RuntimeClassFlags<2>,CScalingInfoBase,Microsoft::WRL::FtmBase,Microsoft::WRL::Details::Nil,Microsoft::WRL::Details::Nil,Microsoft::WRL::Details::Nil,Microsoft::WRL::Details::Nil,Microsoft::WRL::Details::Nil,Microsoft::WRL::Details::Nil,Microsoft::WRL::Details::Nil>::`vector deleting destructor'+0x189
772c919f kernel32!BaseThreadInitThunk+0xe
775a0bbb ntdll!__RtlUserThreadStart+0x20
775a0b91 ntdll!_RtlUserThreadStart+0x1b
Здесь вы можете видеть, что основной проблемой является исключение System.UnauthorizedAccessException. Это только мини-дамп, так что я не вижу, что CryptoQuoteW8cs!UNKNOWN+0x81
делает.
Используйте событие Application.UnhandledException для обработки исключения, которое вы не обработали с помощью try / catch, чтобы предотвратить сбой приложения.
Вот хорошее руководство о том, как обрабатывать исключения: