我最近发布了一款Windows Phone 8应用。 该应用程序有时似乎随机崩溃,但问题是它崩溃没有破坏,我得到的唯一信息是输出上的消息,告诉我有一个访问冲突没有给出任何细节。 因此,在发布之后,我可以从崩溃报告中获得更多信息,但它们对我来说有点隐秘。
信息是:
Problem function: unknown //not very useful
Exception type: c0000005 //this is the code for Access violation exception
Stack trace:
Frame Image Function Offset
0 qcdx9um8960 0x00035426
1 qcdx9um8960 0x000227e2
我不习惯使用内存指针和similia,我不习惯看到像这样的堆栈跟踪。
所以我有这样的问题:
注意:
编辑:
我尝试将Debug类型设置为Native,这让我获得了与开发中心崩溃报告中相同的信息。这种方式调试器在抛出异常时中断并让我看到反汇编的代码,遗憾的是没有qcdx9um8960 .pdb文件(即使在Microsoft Symbol Server上),所以我不知道导致错误的函数名称。
答案 0 :(得分:17)
奇怪的是,在网络上搜索图像名称“qcdx9um8960”会返回几个引用Windows Phone 8和WebBrowser控件的结果。收集答案和回复(有些甚至是MSFT),这是你应该研究的内容:
还有其他一些关于崩溃的问题以及在存在DLL的情况下调试问题,所以不幸的是,我认为你可能会受到一些尚未解决的问题的第三方软件的支配。
1 Access Violation since updated to WP8
答案 1 :(得分:8)
此类崩溃“应该”永远不会由托管代码引起,因此您可以查找应用程序错误地调用某些系统或库API的情况。那太乏味了。问题可能与您的应用程序无关,它可能完全是其他人的代码内部。例如,当用户浏览某个恶意页面时,WebBrowser可能会崩溃。或者失败的代码可以在一个甚至从不运行代码的线程上运行。根据您的观察,调试器在访问冲突之前没有显示任何消息,并且调用堆栈上只有2个帧,我怀疑这是最有可能的。
所以你应该首先关注一个(相当)可靠的repro场景:(通常或通常)产生崩溃的(最小)步骤集。这可能涉及对遇到崩溃的用户进行访谈,或者可能需要一些测试自动化来尝试加速故障率。
一旦你拥有了这一点,微软(或其他第三方)将承担责任 - 托管代码从不应该能够导致未处理的异常,如访问冲突。该方案可能会为您提供有关如何更改应用程序行为以避免此问题的提示,因为实际修复可能需要很长时间才能发布和分发。