垃圾收集时的断言失败

时间:2013-10-14 18:39:45

标签: javascript ios debugging garbage-collection spidermonkey

我在一个iOS应用程序中嵌入SpiderMonkey,在执行JS_GCJS_MaybeGC时遇到断言失败。在我的iPhone上进行测试时会更频繁地发生这种情况,但它也会在模拟器中发生。特别是,断言失败是:

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

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

1 个答案:

答案 0 :(得分:0)

原因是我将__block变量传递给JS_AddValueRootJS_Add*Root函数对内存地址和the implementation is such that

进行操作
  

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

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