这个和JSCore的实现有关,之前遇到过其他地方的内存越界问题导致JSCore内部出现crash。建议打开ASAN跑一下整个app先排查掉已有的内存问题。
ScriptX对C++的STL大部分API只需要11就可以支持,只用到C++17的一些语言特性和部分模板。只要你的编译器能够完整支持C++11,并支持C++1z(C++17的试验版本)就能正常使用。 小游戏项目使用的NDK r16b版本,可谓非常古老,但是使用 C++1z 来编译没有任何问题。
ScriptX合理利用C++异常机制,方便错误的统一处理;并且从实践上来说对于处理因为脚本异常引起的Crash非常有效。 ScriptX建议的异常处理方式是在EngineScope里面紧跟一层try-catch,捕获script::Exception并做明确处理;不建议把异常透传到外部。 因此针对不推荐使用C++异常的项目,可以把脚本部分放到独立模块,仅对该模块启动异常功能,并保证异常不会传到外部。
附上一些上述的设置方法:
CMake
# 使用include而不是add_subdirectory
# 这样才能继续配置ScriptX target
include(ScriptX/CMakeLists.txt)
...
# 给 ScriptX 关掉 rtti
target_compile_options(ScriptX PRIVATE -fno-rtti)
# 给 目标工程关掉 rtti和异常
target_compile_options(UnitTests PRIVATE -fno-rtti -fno-exception)
# 目标工程中使用到ScriptX的cpp需要单独打开异常
set_source_files_properties(
project_file/script_runtime.cc
project_file/script_util.cc
project_file/script_bridge.cc
PROPERTIES COMPILE_FLAGS "-fexception")
Xcode Specific compiler flags for specific files in Xcode
如有其它问题也请到issue提问,或者搜索已有issue。