尝试从转储文件调试Windows应用商店应用

时间:2015-02-09 14:42:47

标签: c# debugging visual-studio-2013 windows-store-apps debug-symbols

让我先从我的主要问题开始,然后在下面我将添加一些细节和历史。我做过研究,但似乎无法将各个部分组合在一起。在投票给我之前请先澄清一下。

我的问题:
为什么我的Windows应用商店应用在我的Win 8.1 64位和我的Win 8.1 32位(Atom)平板电脑上本地启动和运行正常,但不能为其他用户启动?

当我从Windows Store认证失败中获取转储文件时,如何让调试符号生效以便我可以看到更多问题?

当我构建'Release'模式时,它是否实际将符号放入.pdb文件中?它是否为符号编制索引?

这是历史:
我开发了一款小游戏作为通用应用程序,Win Phone和Windows Store。 Win Phone版本在商店中,下载,并且工作正常。

Windows应用商店版本存在问题。

它在我的机器上运行,Win 8.1 64位。它运行在我的平板电脑Win 8.1 Atom上,我在Visual Studio中通过远程调试安装。它通过我的盒子上的App认证。但是当我将软件包提交到​​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会把它们拿起来,并从apx包中复制.exe,.dll和.pdb文件我已经提交给商店,但仍然收到这些消息:

'WER38D7.tmp.dmp'(Minidump):加载'* CryptoQuoteW8cs.exe'。模块是在没有符号的情况下构建的 'WER38D7.tmp.dmp'(CLR v4.0.30319 :):已加载'* CryptoQuoteW8cs.exe'。找不到匹配的二进制文件 'WER38D7.tmp.dmp'(CLR v4.0.30319 :):已加载'* CryptoLogic.DLL'。找不到匹配的二进制文件 运行时捕获了一个致命的异常。请参阅Watch窗口中的$ stowedexception以查看原始异常信息。

所以,我很茫然。如何让我的应用运行?什么错误阻止它?为什么它在本地运行并通过认证,而不是在商店?我该怎么知道?我一直都在Bing和微软,也许我只是在寻找合适的东西。请帮忙!

编辑:
从windbag,我得到这个调用堆栈。

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 个答案:

答案 0 :(得分:2)

好的,在Windbg Extension PDE.dllAndrew Richards的帮助下,我发现您的应用程序因未处理System.UnauthorizedAccessException而崩溃。

我使用!PDE.dpx -dse来显示所有Stowed Exceptions(那些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。 dmp只是一个小型转储,所以我看不出CryptoQuoteW8cs!UNKNOWN+0x81的作用。

使用Application.UnhandledException event处理您未通过try / catch处理的异常,以防止应用崩溃。

以下是有关如何处理异常的良好指南:

<强> Strategies for Handling Errors in your Windows Store Apps