2013-03-10 3 views
5

में एनएसटीस्क सबप्रोसेस फंस गया है, मैं अपने सहायक एप्लिकेशन को चलाने के लिए एनएसटीस्क का उपयोग करता हूं। 99% एक पर मेरे ग्राहक सिस्टम यह ठीक काम करता है, लेकिन दो मुझे वापस जाने के लिए वापस आ गया यह नहीं है। उनमें से एक मुझे रिमोट डेस्कटॉप पर इस मुद्दे को देखने के लिए काफी अच्छा था।_steld_start

मुझे यकीन है कि समस्या इन बफ़र्स भरने संबंधित नहीं है बनाने के लिए StandardOutput/StandardError के लिए अलग NSPipe/NSFileHandle संयोजन का एक बहुत कोशिश की। उदाहरण 1 और 2। मेरा अनुमान है कि यह संबंधित नहीं है क्योंकि यह कई प्रणालियों पर ठीक काम करता है और _dyld_start मानक आउटपुट/मानक त्रुटि को भरने के लिए एप्लिकेशन लाइफसाइक्ल में बहुत जल्दी है।

समस्या के बारे में अन्य नोट:

  • सहायक एप्लिकेशन लॉन्च से टर्मिनल ठीक काम करता है।
  • अटैच किया जा रहा है और अटक प्रक्रिया पर gdb अलग करने और बाद के लायक यह ठीक काम करता है और जब यह समाप्त NSTask काम ऊपर उठाता है -waitUntilExit के बाद।
  • कांटा (2) और execv (3) बजाय NSTask लांच और सहायक ठीक चलाने के लिए सक्षम है का उपयोग करना।
  • मूल प्रक्रिया सैंडबॉक्स है लेकिन मुझे लगता है कि पिछली रिपोर्ट जहां मैक ओएस एक्स 10.6/10.7 पर गैर-सैंडबॉक्स किया गया था। गतिविधि मॉनिटर से प्रक्रिया नमूना की

स्क्रीनशॉट:

Activity Monitor

कोई सुराग या डीबगिंग टिप्स यह पता लगाने की क्यों सहायक _dyld_start में फंस गया है स्वागत कर रहे हैं!

+0

आप टेक्स्ट डेटा की छवियां क्यों पोस्ट कर रहे हैं? टेक्स्ट नमूना रिपोर्ट कॉपी और पेस्ट करें। साथ ही, कंसोल लॉग संदेशों की जांच करें। और 'DYLD_ *' पर्यावरण चर के लिए जांचें। –

+1

कंसोल की जांच करने की सिफारिश को सेकेंड करना। 'DYLD_' पर्यावरण चर के लिए, मानते हुए कि आप उन्हें स्वयं सेट नहीं कर रहे हैं, ~/.MACOSX/environment.plist में देखें। –

+0

कंसोल ने कुछ भी प्रकट नहीं किया था। अगली बार जब मैं मशीन तक पहुंच प्राप्त करता हूं तो 'DYLD_' की जांच करेगा। – catlan

उत्तर

-1

चूंकि किसी ने उत्तर नहीं दिया, मैं कुछ विचार फेंक रहा हूं। हो सकता है कि उनमें से एक जवाब है - केवल अनुमान लगा - लेकिन जब से सुराग और सुझावों का स्वागत करते हैं, तो आप पर एक नज़र ले सकता है:

  • क्रैश डंप में लोड पुस्तकालयों की सूची (वहाँ एक सुराग भी हो सकते हैं)
  • बच्चे की प्रक्रिया में होने वाली कोई भी त्रुटि (कांटा के बाद)। हालांकि, मुझे लगता है कि किसी भी पोस्ट-फोर्क त्रुटि को वापस लेना मुश्किल हो सकता है।

यदि मुझे सही याद है, तो एनएसटीस्क posix_spawn(2) पर कॉल करता है। यह एक सुराग हो सकता है, क्योंकि fork(2) और execv(3) का उपयोग कर काम करने लगता है, तो आप NSTask और गैर-अवरुद्ध विकल्प के बीच अंतरों पर ध्यान केंद्रित कर सकते हैं। जाहिर है, बहुत शुरुआत में कुछ हो रहा है जो बच्चे को सही तरीके से निष्पादित करने से रोकता है।

  • क्या आप सुनिश्चित हैं कि यह अटक गया है और क्रैश नहीं हुआ है? जहां तक ​​उपयोगकर्ता बता सकता है, आपका ऐप आपका ऐप क्रैश होने जैसा नहीं लगेगा। केवल बाल प्रक्रिया दुर्घटनाग्रस्त हो जाएगी।
  • अंतिम उपाय के रूप में, आप किसी भी मैक अपवाद को देखने की कोशिश कर सकते हैं (यदि कोई भी है, तो इसका मतलब यह होगा कि आप वैसे भी पुनर्प्राप्त नहीं कर पाएंगे। लेकिन फिर भी यह मूल्यवान सुराग प्रदान करेगा)।
  • आप इच्छुक कस्टमर्स को अपने sysdiagnose भेजने के लिए कह सकते हैं।
    इस लक्ष्य के लिए, उन्हें पूछना कमान + विकल्प + नियंत्रण + हिट करने के लिए। + कुछ मिनट प्रतीक्षा करने के लिए शिफ्ट करें। इसके तुरंत बाद, उनके खोजक को एक फ़ाइल को प्रकट करने के लिए एक विंडो पॉप करना चाहिए: sysdiagnose_timestamp_.tar.gz। कृपया उन्हें आपसे मेल करने के लिए कहें। मेरा लगभग 5 एमबी है। sysdiagnose man page पर अधिक जानकारी।
+0

@catlan क्या आपके पास एक या अधिक सुझावों (विशेष रूप से sysdiagnose) की जांच करने का समय है? – Jean

+0

क्या मैं आपके प्रश्न में टेक्स्ट को सेब मेलिंग सूचियों के रूप में उपयोग कर सकता हूं? वहां सेब के कुछ इंजीनियर हैं जो मदद करने के लिए तैयार हो सकते हैं। – Jean

+0

मैं अपने ग्राहक से एक sysdiagnose के लिए पूछता हूं लेकिन दिल वापस नहीं है ... मेल-सूची में पूछने के लिए स्वतंत्र महसूस करें। कृपया लिंक-मेल थ्रेड पर लिंक पोस्ट करें ताकि मैं इसका भी अनुसरण कर सकूं। – catlan