0

我正在将 SpiderMonkey 嵌入 iOS 应用程序中,并且在执行JS_GCand时遇到断言失败JS_MaybeGC。在我的 iPhone 上进行测试时,这种情况经常发生,但在模拟器中也会发生。特别是,断言失败是:

Assertion failure: kind == GetGCThingTraceKind(*thingp), at /Users/rquesada/progs/Spidermonkey/js/src/gc/Marking.cpp:366

我对嵌入 SpiderMonkey 不太熟悉。我应该从哪里开始找出并修复这个错误?我的应用程序中只有一个全局对象、一个运行时和一个上下文,并且它们都是从主线程运行的。

4

1 回答 1

0

原因是我将__block变量传递给JS_AddValueRoot. 这些JS_Add*Root函数对内存地址进行操作,实现如下

__block 变量最初是在堆栈上分配的,但是如果复制了引用它们的任何块,它们将被移动到堆上(分配)。

这导致 GCer 认为有些东西没有导致它崩溃。

于 2013-10-14T20:00:52.033 回答