Unity/WebGL 和 asm.js 相关的 MS Edge 崩溃

Unity/WebGL and asm.js related crash in MS Edge

我有一个非常基本的 Unity 应用程序,它本质上是专有框架的测试工具。它在 Chrome、Firefox 和 Safari 中运行良好。 Edge 是另一回事。

在禁用 asm.js 的 Edge 12 中,加载需要 非常 的时间 - 大约 90 秒,而其他浏览器为 15-20 秒。

在启用 asm.js 的 Edge 12 或 13 中,它加载速度很快,但当 Unity 应用程序启动时选项卡立即崩溃。我已经能够弄清楚 "preRun" 回调被调用,但 "postRun" 回调没有被调用。

我不知道如何开始调试 - 如果 Dev Tools 调试器打开,Edge 会禁用 asm.js,并且分离调试器也会禁用 JS 控制台。我无法附加 Unity 调试器,因为崩溃似乎发生在我到达那个点之前。

是否有来自 Edge 的某种日志,我可以在其中找到有关崩溃的任何信息,甚至可能是 JS 堆栈跟踪?

我想专门回答你的问题 - "Is there some kind of log from Edge where I could find anything about the crash, maybe even a JS stack trace?"

我真的建议你使用stacktrace.js - Here is their Github repo

只要写Javascript代码,跨浏览器调试,查找错误或异常,这是目前为止最好的方法。它非常一致,支持大多数浏览器甚至 Edge。

需要注意的一件事 是-您需要了解一些 Javascript Promises,它是 ES6 的一部分(同样,大多数最新的浏览器已经支持)。

看看他们的 documentation 并使用适合您的方法。他们说这是一个你可以使用的 5 合 1 包。

当代码出现错误时,您可以像-

一样简单地处理错误
window.onerror = function(msg, file, line, col, error) {
    // callback is called with an Array[StackFrame]
    StackTrace.fromError(error).then(callback).catch(errback);
};

并从错误中获取 Stacktrace-

var error = new Error('BOOM!');

StackTrace.fromError(error).then(callback).catch(errback)
=> Promise(Array[StackFrame], Error);

希望对您有所帮助。编码愉快! :)

这是由于我们 asm.js 专业化代码(我是其所有者)中 Edge 中的一个错误。感谢您报告此问题,我会尝试尽快发布补丁来解决此问题!如果其他人在 asm.js 遇到崩溃,请随时给我发消息,我很乐意与您一起解决问题(同时找到解决方法)。