Safari中的网页触发EXC_BAD_ACCESS / KERN_INVALID_ADDRESS崩溃

时间:2015-02-10 19:58:57

标签: javascript css safari ios8 mobile-safari

我有一个网络应用程序触发了Safari中似乎是一个iOS8错误,我正在寻找线索以及如何解决它。< / p>

该错误的特点是&#34;此网页出现问题,因此重新加载&#34;在用户在Safari中导航足够的时间后出现在页面顶部。看起来有些事情在幕后崩溃,而Safari只是做得非常好,可以优雅地恢复。阅读崩溃日志显示了这一点:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Subtype: KERN_INVALID_ADDRESS at 0x00000000
Triggered by Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   JavaScriptCore                  0x2d4291d4 0x2d24a000 + 1962452
1   JavaScriptCore                  0x2d50e166 0x2d24a000 + 2900326
2   JavaScriptCore                  0x2d2bc88c 0x2d24a000 + 469132
...

研究暗示CSS文件中translate3dkeyframe的实例可能是罪魁祸首。虽然摆脱它们似乎使虫子不太可能复发,但虫子仍然存在。同样,减少与最有可能触发错误的页面相关联的(非常非常大的)CSS文件的大小似乎有所帮助,但不会让它消失。

我的公司处理一系列针对移动设备优化的面向商务的网络应用程序,这是唯一似乎与此错误相冲突的应用程序;我不知道是什么让这个特殊的应用程序如此愤怒的小特别雪花,但我想弄清楚并纠正它。有没有人对可能触发错误的内容以及我们如何解决它有任何想法?

3 个答案:

答案 0 :(得分:2)

我遇到了与上述问题相同的问题。在我的情况下,当控制少量DOM元素的应用程序的一部分(即element.style.width ...)完成时发生崩溃。完成后,这些元素被故意从DOM中删除。之后发生了崩溃而没有任何JS错误。通过尝试和错误,我分离了代码的哪些部分负责这一点,在我的情况下,注释所有element.style。*行解决了问题 - 应用程序不再崩溃。只有移动游猎(iOS 7和8)有这个问题,其他浏览器工作正常。

狂野的猜测是垃圾收集可能会发生奇怪的事情并且与JS控制的DOM元素相关联。

答案 1 :(得分:1)

查看适用的JavaScript和CSS行,了解可能的语法违规行为。一个好的IDE编辑器应该强调潜在的问题以减轻这种努力。还要检查生成的HTML页面源是否存在格式错误的页面。页面格式问题可能会为某些浏览器创建不稳定的行为,但不会为其他浏览器显示任何问题。

尝试的另一个诊断程序是禁用或注释掉JavaScript代码和/或CSS行的不同部分,以尝试隔离问题的位置。尽可能取出较大的部分,以获得不会产生错误的功能页面。然后,启用或取消注释行,直到错误返回。重复此过程,直到问题区域被隔离进行校正。

还要考虑更改在非常非常大的#34;中进行CSS定义的顺序。 CSS文件。这可能会在页面上产生不同的行为,可以纠正问题或帮助显示问题的原因。

答案 2 :(得分:1)

我在iOS 8.1.3上遇到与safari相同的问题。

实际上浏览器有点疯狂。我的应用程序中有一个加载更多按钮,有线加载下20条记录。有时当您打开页面并单击链接时,Safari会崩溃,并显示“此网页出现问题,因此已重新加载”消息。

崩溃并重新加载后,每次都会崩溃。但是当它工作时它也很稳定。

最后通过将加载记录的数量限制为10来解决问题,因此它可能必须对内存使用做一些事情。

在许多其他地方也遇到此问题,例如图片上传或只是通过ajax加载一些数据。

实际上更有趣的是它在iOS上实际上使用webview组件的chrome中从未发生过。

不确定它对你有什么帮助,但它不仅仅是你的应用程序,所以除非苹果让它一起行动并发布一个稳定的浏览器,我们只能尝试解决它的一些限制。