原生平台 JavaScript 调试

    如果游戏只有在真机上才能运行,那就必须用真机对打包后的游戏进行调试。调试步骤如下:

    • 在 Creator 的 构建发布 面板选择 Android/iOS 平台、Debug 模式,构建编译运行工程(iOS 平台建议通过 Xcode 连接真机进行编译运行)。
    • 用 Chrome 浏览器打开地址:devtools://devtools/bundled/js_app.html?v8only=true&ws={IP}:6086/00010002-0003-4004-8005-000600070008 即可进行调试。其中 {IP} 为 Android/iOS 设备的本地 IP。

    在 Windows 平台及 Mac 平台下调试游戏,步骤与真机调试类似,将工程用 IDE 编译运行之后,此时便可进行调试。步骤如下:

    • 用 IDE 将打包好的工程编译并运行(Windows 平台请使用 Visual Studio,Mac 平台请使用 Xcode)
    • 在游戏运行时打开 Chrome 浏览器,输入地址: 即可进行调试。

      原生平台 JavaScript 调试 - 图2

    通过在 C++ 中断点我们能很便捷地看到 C++ 的调用栈,但并不能同时看到 JS 的调用栈,这个割裂的过程常常会破坏调试的体验。而 lldb 提供的功能支持在调试过程中进行很多的操作,包括查看调用栈。

    lldb 在启动的时候会加载 ,例如下面的配置:

    ~ % cat ~/.lldbinit

    设置了 每次断点 后的行为,执行以下代码输出 JS 调用栈的信息:

    关于 target stop-hook 的用法,详情可参考文档:https://lldb.llvm.org/use/map.html#examining-variables

    但这种方法也存在着明显的缺陷:会对 所有项目 生效,若其他项目不存在相应符号,就会导致出现报错。

    Xcode 在断点中编辑 action(只对具体的断点触发)

    Debugger Command 中输入命令:

    设置 stop hook

    断点触发后,需要在 lldb console 中增加回调。可以针对具体的断点进行更多的调用:

    原生平台 JavaScript 调试 - 图4

    同上,也可以执行以下代码查看调用栈:

    Android StudioRun -> Debug Configuration -> Debugger 界面进行类似的配置:

    Android Studio 也提供了和 Xcode 类似的 。

    如果需要在 Release 模式下调试,或者需要调试定制后的原生引擎,可参考更详细的 。