【问题标题】:assertion failures when garbage collecting垃圾收集时的断言失败
【发布时间】:2013-10-22 09:56:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript ios debugging garbage-collection spidermonkey


    【解决方案1】:

    原因是我将__block 变量传递给JS_AddValueRootJS_Add*Root 函数对内存地址进行操作,the implementation is such that:

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

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

    【讨论】:

      猜你喜欢
      • 2012-06-28
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多