c# - 如何解释此堆栈跟踪

标签 c# c++ windows-phone-8 access-violation

我最近发布了一个 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

我不习惯使用内存指针等,也不习惯看到这样的堆栈跟踪。

所以我有这些问题:

  1. 我应该如何解读/阅读这些信息,每条信息的含义是什么?
  2. 有没有办法利用这些信息来定位我的问题搜索?
  3. 有没有办法在 VS2012 中调试时获取这些信息

注意事项:

  • 我不是在问什么是访问冲突
  • 我将其标记为 c# 和 c++,因为我的代码在 c# 中,但异常是由 WebBrowser 组件的 c++ 实现生成的(我是半猜的)

编辑:

我尝试将 Debug 类型设置为 Native only,这让我获得了与开发中心崩溃报告中相同的信息。这样调试器会在抛出异常时中断并让我看到已禁用的代码,不幸的是没有 qcdx9um8960 .pdb 文件(即使在 Microsoft Symbol Server 上),所以我不知道导致错误的函数名称。

最佳答案

奇怪的是,在网络上搜索图像名称“qcdx9um8960”会返回几个引用 Windows Phone 8 和 WebBrowser 控件的结果。收集答案和回复(有些甚至来自 MSFT),您可能应该研究以下内容:

  • 如果您将应用程序从 Windows Phone 6/7 升级到 8,请确保您仍然没有引用任何 6/7 DLL。 1
  • 确保您没有在 Debug模式下测试或发布您的软件。可能缺少“qcdx9um8960.pdb”文件,导致访问冲突。 1
  • “...如果应用程序打开了多个 WebBrowser 拷贝,则可能存在已知竞争条件问题。查看您的代码是否可能无意中创建了多个实例。” 1
  • 该图像“qcdx9um8960”引用了 Qualcomm DirectX 驱动程序 DLL。也许这不是 WebBrowser 组件的错,而是它可能用来呈现网页的 DirectX 驱动程序。 2
  • 图片的名称表明崩溃发生在搭载型号为 MSM8960 的 Qualcomm Snapdragon S4 Plus 的设备上。 3
  • 假设上述处理器并交叉引用使用该芯片的 Windows 手机,您可能会看到诺基亚 Lumia 920T 上出现的问题。 3 这并不是说驱动程序不适用于多种处理器架构或手机。

在存在该 DLL 的情况下,还有其他一些与崩溃和调试问题有关的问题,因此对您来说很不幸,我认为您可能会受到一些第三方软件的摆布,这些软件有一些 Unresolved 问题。


引用文献

1 Access Violation since updated to WP8

2 [Toolkit][WP8] Performance issues with DepthStencilBuffer

3 Snapdragon (system on chip)

关于c# - 如何解释此堆栈跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659060/

相关文章:

windows-phone-8 - 从 Windows Phone 8.1 中的后台任务启动应用程序

c# - 如何让一个简单的超链接在 XAML 中工作?

c++ - 使用 ssh 远程机器上的 Netcat

c++ - QTabWidget设置只有一个tab的标题字体

c++ - 使用 0MQ 通过 TCP 连接到第一个空闲端口

c# - 将图像转换为base64

Windows 8.1 Professional Hyper-V 无法启动

c# - yield 返回和异常处理

c# - 在 C# 中使用 "is"后跟 "as"而不是 "as"后跟 null 检查有什么意义?

c# - 如何以编程方式检测安装的 32 位或 64 位 visio 版本?