Javascript Safari中触发EXC_坏访问/KERN_无效地址崩溃的网页

Javascript Safari中触发EXC_坏访问/KERN_无效地址崩溃的网页,javascript,css,safari,ios8,mobile-safari,Javascript,Css,Safari,Ios8,Mobile Safari,我有一个web应用程序,它在Safari中触发了一个似乎是iOS8错误的东西,我正在寻找引起它的原因以及如何解决它的线索 该漏洞的特点是用户在Safari中花了足够的时间导航后,页面顶部会出现“此网页出现问题,因此它被重新加载”。看起来有什么事情在幕后发生了,Safari在优雅地恢复方面做得非常好。阅读事故日志发现: Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Subtype: KERN_INVALID_ADDRESS at 0x000

我有一个web应用程序,它在Safari中触发了一个似乎是iOS8错误的东西,我正在寻找引起它的原因以及如何解决它的线索

该漏洞的特点是用户在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文件中的
translate3d
keyframe
可能是罪魁祸首。尽管除掉它们似乎会降低该缺陷再次出现的可能性,但该缺陷仍然存在。同样,减小与最有可能触发bug的页面相关联的(非常非常大)CSS文件的大小似乎有帮助,但并不能使它消失


我的公司处理一系列移动优化的面向商业的网络应用程序,这是唯一一个似乎与这个bug相冲突的;我不知道是什么让这个特殊的应用程序变成了一个愤怒的小雪花,但我想弄清楚并纠正它。有人知道是什么触发了这个bug,以及我们如何解决它吗?

查看适用的JavaScript和CSS行,查看是否存在语法冲突。一个好的IDE编辑器应该突出潜在的问题以简化这项工作。还可以查看生成的HTML页面源以查找格式错误的页面。页面格式问题可能会在某些浏览器中造成不稳定的行为,但在其他浏览器中不会显示任何问题

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


还考虑改变CSS定义在“非常非常大”CSS文件中的顺序。这可能会在页面上产生不同的行为,既可以纠正问题,也可以帮助显示问题的原因。

我遇到了与所述相同的问题。在我的例子中,当控制少数DOM元素(即element.style.width…)的应用程序部分完成时,会发生崩溃。完成后,这些元素被有意地从DOM中删除。在此之后发生的崩溃没有任何JS错误。通过try和error,我隔离了代码的哪些部分对此负责,在我的例子中,注释所有element.style.*行解决了问题-应用程序不再崩溃。只有MobileSafari(iOS7和iOS8)有这个问题,其他浏览器工作正常


毫无疑问,垃圾收集过程中可能会发生一些奇怪的事情,并与JS控制的DOM元素相连接

iOS 8.1.3上的safari也有同样的问题

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

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

最后解决了这个问题,将加载的记录数限制在10条,这样它可能需要处理内存使用情况

在很多其他地方也有这个问题,比如图像上传或者只是通过ajax加载一些数据

更有趣的是,在使用webview组件的iOS上的chrome浏览器中,这种情况从未发生过


不确定它是否对您有所帮助,但它不仅仅是您的应用程序,因此,除非苹果公司采取行动并发布稳定的浏览器,否则我们只能尝试解决它的一些局限性。

我能告诉您的是,您在Safari中触发了分段错误。您的崩溃日志表明可能是JavaScript造成的。如果没有触发它的代码,就不可能找出是什么使它崩溃,但这肯定是Safari中的一个bug。@AlexanderO'Mara:这确实是一次钓鱼探险。我们拥有的Javascript数量相当可观,我还没有找到任何线索表明它的任何特定部分可能是罪魁祸首。如果我能得到一些关于可能导致它的提示(Safari异常容易受到Javascript相关内存泄漏的影响吗?)。。。。假设它实际上是JavaScript,而不是某种独特的CSS设置组合,以某种方式组合形成一个试图下载Cthulhu的eldritch咒语,在这种情况下,苹果团队将因优雅地处理这种情况而受到赞扬。我真的在做比我更喜欢的盲目猜测。虽然,是的,那些“JavaScriptCore”引用似乎确实暗示了JavaScript。似乎不太可能是内存泄漏导致SegFault,但我认为这是可能的。如果可以,请尝试分析内存使用情况@BlairHippo你能就“研究暗示CSS文件中translate3d和关键帧的实例可能是罪魁祸首”发表评论吗?任何表明这一点的链接等?我在我们的应用程序中遇到了同样的问题,该问题导致Safari不断崩溃(令人沮丧的是,使用了开发人员工具)。是否有任何JavaScript或CSS错误不会记录到控制台?因为我们没有看到任何可疑的东西。如果不让网站无法正常运行,移除大量CSS或JavaScript是很困难的。虽然我想我可以进去尝试手术移除任何我能移除的东西,无论我能去哪里,看看这个bug是否是某种表象