请问如何避免JS CallFunctionName调用导致的崩溃

请问如何避免JS_CallFunctionName调用导致的崩溃?怎么才能在调用前发现有问题,而不去调用呢?

JSB里现在经常会出现:
executeFunctionWithOwner 调用的时候 有空指针 但是没办法去处理掉,希望能直接不执行该方法即可。
JS端的东西都好端端的在那里呢,并没有丢失,但是就是会无法找到要执行的方法,真不是JS端代码问题。

例如:
bool ScriptingCore::executeFunctionWithOwner(jsval owner, const char *name, uint32_t argc, jsval *vp)
{
JS::HandleValueArray args = JS::HandleValueArray::fromMarkedLocation(argc, vp);
JS::RootedValue rval(_cx);
return executeFunctionWithOwner(owner, name, args, &rval); //JS端比较重的时候,这一行经常崩溃,如何提前返回FALSE?
}

又一个没做参数校验引起的崩溃。也许可先用cc.isObjectValid()?

大哥 我里面没有主动调用任何参数
这个是COCOS自己调用的一些方法,我只是NEW了几十个精灵放在舞台上,然后用了一个update方法

请问该怎么在c++端:
例如:
bool ScriptingCore::executeFunctionWithOwner(jsval owner, const char *name, uint32_t argc, jsval *vp)
{
JS::HandleValueArray args = JS::HandleValueArray::fromMarkedLocation(argc, vp);
JS::RootedValue rval(_cx);
return executeFunctionWithOwner(owner, name, args, &rval); //JS端比较重的时候,这一行经常崩溃,如何提前返回FALSE?
}

我指出的这一行之前,能检测出提前返回?我spidermonkey没怎么看过 不知道怎么弄

如果我没记错,这个版本好像是有问题的,你把引擎版本升上去吧

谢谢回复,
我也有打算升级,但是目前项目上线时间紧急,我也在这个版本上修改了好多地方,升级工程好恐怖。。。

如果你们没有动底层的话(引擎底层最好都不要动),升级应该很快的
花个一天或者半天时间去升级下吧,也不要升太高,3.11 3.12这样子都去试一下,能解决最好,这样就不用干巴巴的等了

请问这一句 在前面写什么代码能防止崩溃
我调试发现 cx,obj,name都有,都不为空 args retVal 不知道该如何判断是否非法。

bRet = JS_CallFunctionName(cx, obj, name, args, retVal);