尝试从转储文件中调试Windows Store应用程序

3
让我从我的主要问题开始,然后在下面添加一些具体细节和历史。我已经进行了研究,但似乎无法将各个部分拼凑在一起。请在投票之前要求澄清。
我的问题: 为什么我的Windows Store应用程序可以在Win 8.1 64位和Win 8.1 32位(Atom)平板电脑上本地启动并正确运行,但对其他用户而言却无法启动?
当我从Windows Store认证失败中获取转储文件时,如何使调试符号起作用以便我可以看到更多问题?
当我在“发布”模式下构建时,它是否实际将符号放入.pdb文件中?并且它是否索引符号?
这是历史:
我开发了一个小游戏作为通用应用程序,适用于Win Phone和Windows Store。 Win Phone版本在商店中,正在被下载,并且正常工作。
Windows Store版本存在问题。
它在我的电脑上运行,Win 8.1 64位。它在我的平板电脑上运行,Win 8.1 Atom,我通过Visual Studio内的远程调试安装它。它在我的电脑上通过了应用认证。但是当我将包提交到Windows Store时,它未通过,并且报告说启动时崩溃。(某种方式上第一个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和Microsoft上搜索过了,也许我只是没有搜索正确的内容。请帮帮我!

编辑:
从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

创建一个完整的转储文件(procdump -ma -i C:\dumps),然后使用Windbg而不是VS打开dmp文件进行调试。您能在这里调试它吗? - magicandre1981
1个回答

2
好的,通过Andrew Richards提供的Windbg Extension PDE.dll的帮助,我发现您的应用程序崩溃是因为存在未处理的System.UnauthorizedAccessException
我使用了 !PDE.dpx -dse 命令来显示所有被存储的异常(即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事件处理未通过try/catch处理的异常,以防止应用程序崩溃。

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

处理Windows Store应用中的错误的策略


谢谢。我回家后会更加努力地研究这个问题。如果没有你的帮助,我不确定我该如何解决它。我不喜欢不知道我所编写代码下面隐藏着什么......但我正在努力学习。 - M Kenyon II
“我在网上看到过关于那个的评论。”哪些评论? - magicandre1981
你添加了全局错误处理程序吗?还请分享您得到的新DMP。 - magicandre1981
有一堆文件找不到... propsys.dll,Windows.Storage.ApplicationData.pdb。仍然无法弄清楚是什么触发了它们的ACCESSDENIED。我在64位、32位、管理员帐户、标准帐户、子帐户上进行了测试。我甚至测试了没有网络连接,从未遇到过这个错误!我还添加了你提到的未处理异常内容。 - M Kenyon II
1
使用您的命令,我没有得到任何输出。 - Luca Ziegler
显示剩余11条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接