2012-11-10 17 views
7

मुझे अपने पहले मैक ऐप स्टोर ऐप के लिए क्रैश रिपोर्ट प्रस्तुत करने के बाद (आईटीसी में) मिला। स्टैक ओवरफ्लो पर स्थापित ज्ञान का उपयोग करके मैंने इस लॉग का प्रतीक करने की कोशिश की, लेकिन (एटोस और ओटोल का उपयोग करके) मैं केवल अंतिम (20) लाइन (start (in My App) + 52) को पढ़ने में सक्षम था। मुझे वास्तव में नहीं पता कि ऊपर की रेखाओं की व्याख्या कैसे करें, और कैसे ढेर फ्रेम है कि आपके कोड में नहीं हैं अक्सर चाय की पत्तियां पढ़ने पर सीमाओं, लेकिन इस मामले में, यह बहुत स्पष्ट है कि क्या हुआ पढ़ना दुर्घटना के कारणों का पता लगाने।इस क्रैश लॉग को कैसे समझें

Process:   My App [270] 
Identifier:  com.mycompany.myapp 
Version:   1.0.0 (1.0.0) 
App Item ID:  568750000 
App External ID: 11410000 
Code Type:  X86-64 (Native) 
Parent Process: launchd [143] 
User ID:   501 

Date/Time:  2012-11-07 19:21:11.365 -0200 
OS Version:  Mac OS X 10.8.2 (12C60) 
Report Version: 10 

Per-App Interval Since Last Report: 1232 sec 
Per-App Crashes Since Last Report: 1 

Crashed Thread: 0 Dispatch queue: com.apple.main-thread 

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: EXC_I386_GPFLT 


Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 
0 libobjc.A.dylib     0x00007fff877a5256 objc_msgSend + 22 
1 com.apple.AppKit    0x00007fff8dac6e27 -[NSOutlineView _delegate_isGroupRow:] + 66 
2 com.apple.AppKit    0x00007fff8da46878 -[NSTableView _isGroupRow:] + 81 
3 com.apple.AppKit    0x00007fff8da41fad -[NSTableView _isSourceListGroupRow:] + 56 
4 com.apple.AppKit    0x00007fff8da418e8 -[NSTableView rectOfRow:] + 288 
5 com.apple.AppKit    0x00007fff8da5b3cb _NSTVVisibleRowsForUpdate + 296 
6 com.apple.AppKit    0x00007fff8da5aa85 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96 
7 com.apple.AppKit    0x00007fff8da5a8a1 -[NSTableRowData updateVisibleRowViews] + 119 
8 com.apple.AppKit    0x00007fff8da6e463 -[NSTableRowData _idleUpdateVisibleRows] + 66 
9 com.apple.CoreFoundation  0x00007fff87547da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 
10 com.apple.CoreFoundation  0x00007fff875478bd __CFRunLoopDoTimer + 557 
11 com.apple.CoreFoundation  0x00007fff8752d099 __CFRunLoopRun + 1513 
12 com.apple.CoreFoundation  0x00007fff8752c6b2 CFRunLoopRunSpecific + 290 
13 com.apple.HIToolbox    0x00007fff830a30a4 RunCurrentEventLoopInMode + 209 
14 com.apple.HIToolbox    0x00007fff830a2e42 ReceiveNextEventCommon + 356 
15 com.apple.HIToolbox    0x00007fff830a2cd3 BlockUntilNextEventMatchingListInMode + 62 
16 com.apple.AppKit    0x00007fff8d8d8613 _DPSNextEvent + 685 
17 com.apple.AppKit    0x00007fff8d8d7ed2 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128 
18 com.apple.AppKit    0x00007fff8d8cf283 -[NSApplication run] + 517 
19 com.apple.AppKit    0x00007fff8d873cb6 NSApplicationMain + 869 
20 com.mycompany.myapp    0x000000010f29ce1c 0x10f29b000 + 7708 
+0

यह विभाजन की गलती है, शायद आपकी किसी एक विधि में नहीं हुई है। इसलिए आपने किसी असंगत स्थिति में तालिका दृश्य को छोड़ दिया है। –

+0

आपकी सहायता के लिए धन्यवाद, लेकिन मेरे ऐप में बड़ी संख्या में टेबल व्यू और आउटलाइन व्यू है। खिड़की की पहचान किए बिना यह रिपोर्ट मेरे लिए पूरी तरह से अनुपयोगी है (ओएसएक्स :(से अन्य रिपोर्ट की तरह)। –

उत्तर

38

मैं जा रहा हूँ आपके क्रैश लॉग को पढ़ने के लिए, जैसा कि मैं साथ जाता हूं अनुवाद कर रहा हूं।

स्टैक i नीचे से ऊपर बनाया गया है (बस असली दुनिया में ढेर की तरह)। मैं पीछा करने में कटौती होगी:

10 com.apple.CoreFoundation  0x00007fff875478bd __CFRunLoopDoTimer + 557 
9 com.apple.CoreFoundation  0x00007fff87547da4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20 

एक टाइमर निकाल दिया।

8 com.apple.AppKit    0x00007fff8da6e463 -[NSTableRowData _idleUpdateVisibleRows] + 66 
7 com.apple.AppKit    0x00007fff8da5a8a1 -[NSTableRowData updateVisibleRowViews] + 119 
6 com.apple.AppKit    0x00007fff8da5aa85 -[NSTableRowData _unsafeUpdateVisibleRowEntries] + 96 
5 com.apple.AppKit    0x00007fff8da5b3cb _NSTVVisibleRowsForUpdate + 296 

इस टाइमर में (जो संभवतः निष्क्रिय समय के दौरान आग पर सेट है), तालिका दृश्य अपने ज्ञान जो की पंक्तियों दिखाई दे रहे हैं अद्यतन करने के लिए प्रयास करता है।

(अंतिम फ्रेम एक है कि स्पष्ट करता है यह अद्यतन करने की जाती है कि है जो पंक्तियाँ, दृश्य पंक्तियां कि दिखाई दे रहे हैं अद्यतन करने के नहीं हैं। आप समारोह के नाम के शब्दों से बता सकते हैं।)

4 com.apple.AppKit    0x00007fff8da418e8 -[NSTableView rectOfRow:] + 288 

यह निर्धारित करने के लिए कि कोई पंक्ति दिखाई दे रही है, दृश्य को यह पता लगाने की आवश्यकता है कि वह पंक्ति अपनी सीमाओं के भीतर कहां है (संभावित रूप से स्क्रॉल व्यू के भीतर अपने दृश्य आयताकार के साथ छेड़छाड़ करने के लिए)।

कि अंत की ओर, तालिका दृश्य इस पंक्ति की विशेषताओं यह पता लगाने की कोशिश कर रहा है:

3 com.apple.AppKit    0x00007fff8da41fad -[NSTableView _isSourceListGroupRow:] + 56 

यह एक स्रोत सूची समूह पंक्ति में है?

2 com.apple.AppKit    0x00007fff8da46878 -[NSTableView _isGroupRow:] + 81 

वह किसी भी समूह पंक्ति बिल्कुल है?

1 com.apple.AppKit    0x00007fff8dac6e27 -[NSOutlineView _delegate_isGroupRow:] + 66 

के प्रतिनिधि पूछते हैं।

0 libobjc.A.dylib     0x00007fff877a5256 objc_msgSend + 22 

एक संदेश भेजने के लिए प्रयास कर रहा। यह वह जगह है जहां आपकी प्रक्रिया दुर्घटनाग्रस्त हो गई।

तो, दुर्घटना तब हुई जब बाह्यरेखा दृश्य अपने प्रतिनिधि को संदेश भेजने की कोशिश कर रहा था।

  1. विचाराधीन दृश्य में एक रूपरेखा देखने के लिए, नहीं एक गैर रूपरेखा तालिका दृश्य है:

    इससे हम तीन तथ्यों प्राप्त कर सकते हैं। (फ्रेम # 1 यह साबित करता है। एक नियमित तालिका दृश्य NSOutlineView नहीं है।) यह अकेले शामिल दृश्य की पहचान कर सकता है, लेकिन यदि ऐसा नहीं होता है, तो कोई बड़ी बात नहीं है, क्योंकि हमारे पास एक और तथ्य है जो इसे कम कर सकता है।

  2. प्रश्न में रूपरेखा दृश्य में एक प्रतिनिधि है। यह अकेले शामिल रूपरेखा दृश्य की पहचान कर सकता है, लेकिन अगर ऐसा नहीं होता है, तो कोई बड़ी बात नहीं है, क्योंकि समस्या बिल्कुल दृश्य के साथ नहीं है।
  3. समस्या यह है कि दृश्य का प्रतिनिधि जो वस्तु अपर्याप्त रूप से स्वामित्व में है। यह समय-समय पर मर जाता है इससे पहले कि रूपरेखा दृश्य इसे संदेश भेज सकता है जिसे हमने स्टैक ट्रेस में देखा था।

उपयोग उपकरण के Zombies टेम्पलेट निर्धारित करने के लिए जो वस्तु रूपरेखा को देखने के लिए बात करने के लिए अनुचित या असंतुलित रिहाई है कि यह पता लगाने के लिए मार डाला है कि वस्तु के इतिहास पर नज़र डालना कोशिश कर रहा है, और। आपको शायद उस वस्तु का एक मजबूत स्वामित्व कहीं भी जोड़ना होगा।

+0

मैं वास्तव में आपके प्रभावशाली स्पष्टीकरण के लिए धन्यवाद देता हूं। इससे मुझे इस लॉग को बेहतर ढंग से समझने की अनुमति मिली। अब मैं यह बताने की कोशिश करूंगा कि बग कहां है है –

+4

पीटर, यह सबसे उपयोगी पोस्टों में से एक है जो मैंने कभी पार किया है! यह वही है जो मेरे साथ हो रहा था, हालांकि एक रूपरेखा दृश्य के बजाय, केवल एक सादा तालिका दृश्य के साथ। मेरी त्रुटि यह थी कि मैं सेट करना भूल गया एआरसी को मेरे व्यू कंट्रोलर को छोड़ने से पहले मेरे टेबल व्यू का प्रतिनिधि और डेटा स्रोत शून्य। –

+0

मेरे पास मेरे स्टैक ट्रेस में मजबूत '_delegate_' सुराग नहीं था लेकिन यह एक प्रतिनिधि मुद्दा बन गया। मैंने एक व्यू कंट्रोलर को धक्का दिया नेविगेशन स्टैक और इसे टैब बार के प्रतिनिधि के रूप में सेट करें। फिर मैं उस व्यू कंट्रोलर को पॉप करने से पहले प्रतिनिधि को शून्य पर सेट करना भूल गया। फिर जब मैंने टैब बार पर टैप किया, तो बूम, क्योंकि यह एक व्यू कंट्रोलर था टी अब मौजूद नहीं है। मेरे लिए यह अजीब बात है कि इन मामलों में कोई अपवाद नहीं है। –

संबंधित मुद्दे