如何解释此堆栈跟踪

本文关键字:堆栈 跟踪 解释 何解释 | 更新日期: 2023-09-27 18:30:23

我最近发布了一个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,也不习惯看到这样的堆栈跟踪。

所以我有这样的问题:

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

笔记:

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

编辑:

我尝试将调试类型设置为仅本机,这让我获得了与开发人员中心崩溃报告中相同的信息。这样,调试器在抛出异常时会中断,让我看到分解的代码,不幸的是没有 qcdx9um8960 .pdb文件(即使在Microsoft符号服务器上),所以我不知道导致错误的函数名称。

如何解释此堆栈跟踪

奇怪的是,在 Web 上搜索映像名称"qcdx9um8960"会返回引用 Windows Phone 8 和 WebBrowser 控件的几个结果。收集答案和回复(有些甚至是MSFT),以下是您可能应该查看的内容:

  • 如果将应用程序从 Windows Phone 6/7 升级到 8,请确保不再引用任何 6/7 DLL。
  • 确保未在调试模式下测试或发布软件。可能缺少"qcdx9um8960.pdb"文件,导致访问冲突。1
  • "...如果应用打开了多个 Web 浏览器副本,则可能存在争用条件已知问题。看看你的代码是否无意中产生了多个实例。1
  • 该图像"qcdx9um8960"引用了Qualcomm DirectX驱动程序DLL。也许这不是 WebBrowser 组件的错,而是它可能用来呈现网页的 DirectX 驱动程序。阿拉伯数字
  • 该图像的名称表明崩溃发生在由型号为MSM8960的高通Snapdragon S4 Plus供电的设备上。3
  • 假设上面的处理器,并交叉引用使用该芯片的Windows手机,您可能会看到诺基亚Lumia 920T上发生的问题。 3 这并不是说该驱动程序不适用于多种处理器架构或手机。
在该

DLL 存在的情况下,还有其他几个关于崩溃和调试问题的命中,所以不幸的是,我认为您可能会受到一些第三方软件的摆布,这些软件有一些未解决的问题。


引用

1 自更新到 WP8 以来的访问冲突

2 [工具包][WP8] DepthStencilBuffer 的性能问题

3 金鱼草(片上系统)

这种崩溃"应该"永远不会由托管代码引起,因此你可以寻找应用错误地调用某些系统或库 API 的情况。 这很乏味。 问题可能与您的应用程序无关,它可能完全是其他人的代码内部问题。 例如,当用户浏览到一些邪恶的页面时,WebBrowser可能会崩溃。或者,失败的代码可能在甚至从未运行过代码的线程上运行。 根据您观察到调试器在访问冲突之前不显示任何消息,以及调用堆栈上只有 2 帧的事实,我怀疑这是最有可能的。

因此,您应该首先关注获得(相当)可靠的重现方案:(经常或通常)产生崩溃的(最小)步骤集。这可能涉及采访经历过崩溃的用户,或者您可能进行一些测试自动化以尝试加快故障率。

一旦你有了这个,Microsoft(或其他第三方)将承担责任 - 托管代码永远不应该能够导致未处理的异常,如访问冲突。 该方案可能会提示如何更改应用的行为以避免问题,因为真正的修复可能需要很长时间才能发布和分发。