12

我们正在从10.6移植到10.8的应用程序。我正在查看我们在应用中加载的dylib。我在垃圾收集工作队列面临非常不寻常的崩溃,并带有以下消息。dylib加载时垃圾收集工作队列崩溃

malloc: Thread::suspend(): unable to suspend a thread: err = 268435459, Thread 0x111000000: _pthread = 0x108129000, _thread = 0x8b07, _stack_base = 0x108129000, enlivening on, 0 local blocks 

对于应用GCC_ENABLE_OBJC_GC = required被设置。如果我在dylib中有GCC_ENABLE_OBJC_GC = required,它仍然会崩溃。我无法在应用程序中关闭垃圾收集器。我必须从我的dylib管理它。

崩溃的原因结果是垃圾收集器无法暂停该线程。 (正如它在日志中所说)。此线程使用thread_create()创建。如果我在dylib的构造函数中放入一个无限循环(带睡眠),我不会崩溃。当构造函数完成其执行时,我会崩溃。

他们告诉垃圾收集器不要试图挂起线程吗?或者增加线程的引用计数?或者我可以做的任何事情来阻止垃圾回收器不会干扰我的dylib代码。

+0

您能澄清一下:你打算让你的项目使用GC吗?或不?我的第一个猜测是你正在加载的dylib是使用GC构建的,但你的主应用程序不是。 – ipmcc 2013-02-12 13:03:23

+0

我只是写dylib和加载dylib导致崩溃。构建应用程序以使用GC(GCC_ENABLE_OBJC_CC =必需)。如果我在dylib上启用或取消标志,那没关系。它仍然崩溃。 – MacGeek 2013-02-12 13:11:06

+0

你使用哪种编译器? gcc版本?另外:什么是部署目标,基础SDK? – 2013-03-27 14:30:36

回答

-1

我们正在从10.6移植到10.8的应用程序。 崩溃的原因原来是垃圾收集器无法暂停该线程。

它是预期的。
从OSX 10.8开始,不推荐使用垃圾回收。所以CG无法暂停线程来履行其职责。因此,您可以获得所有您遇到的问题。

如果您要开发10.8,则需要转换为ARC(最佳)或返回到手动引用计数。如果你想移动到弧线,看到Transitioning to ARC Release Notes


从苹果文档约10.8:

重要提示:在OS X v10.8开始,垃圾收集过时。 改为使用ARC(自动引用计数)。要了解有关 ARC的更多信息,请参阅转换到ARC版本说明。

来源:What's new in OS X v10.8 Mountain Lion

答案:

  • 是他们的一种方式来告诉垃圾收集器不尝试挂起线程?

不,这是它的工作原理。

  • 或者增加线程的引用计数?或者我可以做的任何事情来阻止垃圾收集器不会干扰我的dylib代码。

不可以,因为GC在10岁以下已弃用。8,如果你想支持10.8,那么它必须摆脱它。

GC在MAC平台上一直是一个非常短暂的技术。由于各种原因,ARC取而代之。

+0

仅仅因为某些东西被弃用并不意味着它不再起作用。这意味着它不应该再用于新代码,并且它最终会消失。如果立即停止工作,将事物标记为废弃将是没有意义的 - 然后可以立即将其删除。 – Sven 2013-04-06 13:24:52

+0

是的,但有很多问题突然出现在10.8以下,比如OP正在经历的问题。 *您会认真**推荐MacGeek继续使用已弃用的技术,并花时间尝试在此过程中进行修补吗?* – Jean 2013-04-06 13:29:00

3
It is expected. 
Starting with OSX 10.8, Garbage collection is deprecated. So CG is unable to suspend the threads to perform its duty. As a result you get all the issues you are facing. 

If you want to develop for 10.8, you need to convert to ARC (best) or move back to manual reference counting. If you wish to move to arc, see Transitioning to ARC Release Notes 

从苹果文档约10.8:

重要信息:从在OS X v10.8,垃圾收集已被弃用。改用ARC(自动引用计数)。要了解有关ARC的更多信息,请参阅转换到ARC版本说明。

https://books.google.co.in/books?id=8nzwsciij20C&pg=PT431&lpg=PT431&dq=Crash+of+Garbage+Collection+Work+in+objective+c&source=bl&ots=xTjLETFMsO&sig=b33rLeXJVh1WtnAvcVJykfNtvOU&hl=en&sa=X&ved=0ahUKEwiyqZrC2rvNAhVKNI8KHZRdC7AQ6AEIKDAC#v=onepage&q=Crash%20of%20Garbage%20Collection%20Work%20in%20objective%20c&f=false