12

हम 10.6 से 10.8 तक एक ऐप पोर्ट कर रहे हैं। मैं ऐप में लोड 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 है तो यह अभी भी दुर्घटनाग्रस्त हो जाएगा। मैं आवेदन में कचरा कलेक्टर बंद नहीं कर सकता। मुझे इसे अपने डिलिब से दुर्घटनाग्रस्त करना है।

क्रैश के कारण यह पता चला है कि कचरा कलेक्टर थ्रेड को निलंबित करने में सक्षम नहीं है। (जैसा कि यह लॉग में कहता है)। यह धागा thread_create() का उपयोग करके बनाया गया है। यदि मैं डाइलिब के निर्माता में लूप (नींद के साथ) अनिश्चितकालीन रखता हूं, तो मुझे क्रैश नहीं होता है। जब रचनाकार ने अपना निष्पादन पूरा कर लिया है तो मुझे दुर्घटना हो रही है।

क्या कचरा कलेक्टर को बताने की कोशिश करने और थ्रेड को निलंबित करने का उनका तरीका है? या धागे की संदर्भ गणना बढ़ाने के लिए? या कचरा कलेक्टर को रोकने के लिए मैं कुछ भी कर सकता हूं जो मेरे डाइलिब कोड में हस्तक्षेप नहीं करता है।

+0

आप स्पष्ट कर सकते हैं: आप अपनी परियोजना के लिए करना चाहते हैं जीसी उपयोग करने के लिए? या नहीं? मेरा पहला अनुमान यह है कि आप जिस डायलीब को लोड कर रहे हैं वह जीसी का उपयोग करने के लिए बनाया गया था लेकिन आपका मुख्य एप्लीकेशन नहीं था। – ipmcc

+0

मैं सिर्फ dylib लिख रहा हूँ और dylib क्रैश कारणों को लोड कर रहा हूँ। आवेदन जीसी (GCC_ENABLE_OBJC_CC = आवश्यक) का उपयोग करने के लिए बनाया गया था। यदि मैं डाइलिब पर ध्वज को सक्षम या डिब्बे करता हूं, तो इससे कोई फर्क नहीं पड़ता। यह अभी भी दुर्घटनाग्रस्त है। – MacGeek

+0

आप दोनों के लिए किस कंपाइलर का उपयोग करते हैं? जीसीसी संस्करण? इसके अलावा: तैनाती लक्ष्य, आधार एसडीके क्या हैं? –

उत्तर

-1

हम 10.6 से 10.8 तक एक ऐप पोर्ट कर रहे हैं। दुर्घटना का कारण यह पता चला है कि कचरा कलेक्टर धागे को निलंबित करने में सक्षम नहीं है।

यह अपेक्षा की जाती है।
ओएसएक्स 10.8 से शुरू होने पर, कचरा संग्रह को हटा दिया गया है। तो सीजी अपने कर्तव्यों को पूरा करने के लिए धागे को निलंबित करने में असमर्थ है। नतीजतन आप जिन मुद्दों का सामना कर रहे हैं उन्हें प्राप्त करें।

यदि आप 10.8 के लिए विकसित करना चाहते हैं, तो आपको एआरसी (सर्वोत्तम) में कनवर्ट करना होगा या मैन्युअल संदर्भ गिनती पर वापस जाना होगा। आप चाप को स्थानांतरित करना चाहते हैं, 10.8 के बारे में एप्पल प्रलेखन से Transitioning to ARC Release Notes


देखें:

महत्वपूर्ण: ओएस एक्स v10.8 में शुरू, कचरा संग्रहण मान्य नहीं है। इसके बजाए एआरसी (स्वचालित संदर्भ गणना) का उपयोग करें। एआरसी के बारे में और जानने के लिए, एआरसी रिलीज नोट्स में संक्रमण देखें।

स्रोत: What's new in OS X v10.8 Mountain Lion:

उत्तर:

  • उनके एक तरह से कोशिश करते हैं और निलंबित करने के लिए नहीं धागा कचरा कलेक्टर को बताने के लिए है?

नहीं। यह इस तरह काम करता है।

  • या धागे की संदर्भ संख्या बढ़ाने के लिए? या कचरा कलेक्टर को रोकने के लिए मैं कुछ भी कर सकता हूं जो मेरे डाइलिब कोड में हस्तक्षेप नहीं करता है।

नहीं। चूंकि जीसी 10 के तहत बहिष्कृत है।8, अगर आप 10.8 का समर्थन करना चाहते हैं तो आपको इससे छुटकारा पाना होगा।

जीसी मैक मंच पर वास्तव में अल्पकालिक तकनीक रही है। और विभिन्न कारणों से एआरसी द्वारा प्रतिस्थापित किया गया।

+0

सिर्फ इसलिए कि कुछ बहिष्कृत किया गया है इसका मतलब यह नहीं है कि यह अब और काम नहीं कर रहा है। इसका मतलब है कि इसे नए कोड के लिए और अधिक इस्तेमाल नहीं किया जाना चाहिए और यह अंततः दूर जायेगा। अगर वे तुरंत काम करना बंद कर देते हैं तो चीजों को चिह्नित करने के लिए यह थोड़े व्यर्थ होगा - फिर उन्हें तुरंत हटाया जा सकता है। – Sven

+0

हां, लेकिन बहुत सारे मुद्दे हैं जीसी अचानक 10.8 के तहत पॉप अप करते हैं, जैसे कि ओपी का सामना करना पड़ रहा है। * क्या आप ** गंभीरता से ** मैकजीक को बहिष्कृत तकनीकों का उपयोग जारी रखने के लिए अनुशंसा करेंगे और रास्ते में पैच करने का प्रयास करने में समय व्यतीत करेंगे? * – Jean

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:

महत्वपूर्ण: ओएस एक्स v10.8 में शुरुआत, कचरा संग्रहण मान्य नहीं है। इसके बजाए एआरसी (स्वचालित संदर्भ गणना) का प्रयोग करें। एआरसी के बारे में और जानने के लिए, एआरसी रिलीज नोट्स में संक्रमण देखें।

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