《技术分享》JS错误报告及错误定位方法

 2024-02-10 00:03:59  阅读 0

前言

我经常在论坛上看到人们询问 Bugly 的 JS 上传错误。 根据官方文档,会出现各种错误等等。 出现这个问题的原因是JS引擎升级了,导致Bugly调用的API在新引擎中不存在,因此无法成功访问。

我最近刚刚完成了异常报告机制,所以我将分享这部分内容。 至于如何接入Bugly和IOS,请自行阅读官方文档。 如果你遵循它们,通常就能成功。

中会出现一些小错误,主要是搜索路径问题。 如果按照官方的方法,最后还需要在\-src\proj.-\app\jni\.mk中添加搜索路径:

我们不想让Bugly污染-x引擎,所以我们没有按照Bugly官方的方式去连接,而是直接添加了。

这里我想分享的是如何报告JS错误以及如何轻松定位报告的JS错误。

JS异常报告

Bugly报告JS错误的方式是调用::异常处理,即调用(cx,::);。

不过0.6以后JS引擎升级到SM52后,这个功能就消失了,所以原来的Bugly方法就无法使用了。

我修改了另一种方法,公开回调函数供Bugly使用,这样我就不必依赖JS引擎函数:

调用方法java_android中调用js方法_调用javascript方法

然后添加回调函数:panda这两天提出了一个PR6,将::集成到异常调用中,但是在v1.6.1中还没有提供。 它需要从上面集成。 如果没有集成,也可以在上集成:

android中调用js方法_调用javascript方法_调用方法java

上面是脚本文件和行号,也就是调用栈行信息。

如果集成了PR,可以将回调写进去,完整代码如下:

调用javascript方法_android中调用js方法_调用方法java

调用javascript方法_调用方法java_android中调用js方法

打开.cpp并添加以下代码:

android中调用js方法_调用方法java_调用javascript方法

打开.h加

打开 .mm 加

定位工程代码错误

报JS错误后,你会发现另一个问题。 编译项目时,先将项目合成为.js,然后编译为字节码.jsc。 问题是,在合成.js时,代码被压缩,空格和换行符被删除,.js变成了一个只有一行的文件。 此时Bugly报告的错误信息是第1行的xxxx列。

看到这里,一是没有.js,二是只有一行的文件相当难以理解。 这样,即使你向Bugly举报,也只能知道有脚本错误,却很难知道错误出在哪里。

为了解决这个问题,需要这样的支持:

有一个命令可以单独生成.js,并且可以设置是否压缩脚本。

还有另一个命令将 .js 编译为 jsc。

询问引擎团队后,我确认第一个命令不可用。 经过深思熟虑,我终于找到了一个非常复杂但可以实现的方法,并最终将其集成到封装过程中。 整个过程大概是这样的:

1.使用命令行编译项目,这次使用debug=true:

编译完上面的内容就可以得到.dev.js文件,这是一个未压缩的工程脚本。

2. 将 .dev.js 复制到备份目录。 如果构建过程有版本,最好在文件名中添加版本号。 这是我们所做的:

调用javascript方法_调用方法java_android中调用js方法

复制完成后,你会得到一个.1242.js这样的文件。 如果以后出现错误,可以根据版本号知道是哪个脚本。

3.使用命令行再次编译项目,这次使用debug=false:

编辑完成后,会得到一堆jsc文件,接下来就是重点了。

4、将刚才备份的.js编译成jsc并替换原来的,这样就可以得到正常格式的jsc文件。

位于:$()\\\\-x\\tools\\-\\\\\\bin\\jsbcc.exe"

经过以上的周折,你就会得到一个正常格式的.jsc。 其他文件(例如 .jsc)是引擎脚本。 我没有这样处理,因为我相信引擎是相对稳定的。

打包成原生包后,如果遇到脚本错误,可以在Bugly网站上看到信息。 如果出现如下错误:

调用方法java_android中调用js方法_调用javascript方法

看上面的错误,直接打开对应的脚本,定位到7729行,立刻就知道问题出在哪里了。 据反馈,这个问题也将在 Cocos v1.6.2 中得到解决,值得期待。

我不知道其他人如何解决这个问题。 如果您有更好的方法,请在文末留言或在“阅读原文”社区发帖。 如果没有,你可以尝试我的更复杂的计划:)

标签: js js代码 bugly

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码