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