2009-08-15 13 views
25

आईफोन ओएस पर KERN_INVALID_ADDRESS और KERN_PROTECTION_FAILURE के बीच क्या अंतर है?KERN_INVALID_ADDRESS और KERN_PROTECTION_FAILURE के बीच क्या अंतर है?

मैं एक तदर्थ बीटा परीक्षक से दो क्रैश रिपोर्ट है कि अलग 5 मिनट और उन दोनों के बीच मुख्य अंतर यह है (अलावा अन्य "बाइनरी चित्र:" खंड) हैं इस खंड है:

रिपोर्ट एक:

Exception Type: EXC_BAD_ACCESS (SIGBUS) 
Exception Codes: KERN_PROTECTION_FAILURE at 0x00000008 

रिपोर्ट बी:

:

Exception Type: EXC_BAD_ACCESS (SIGSEGV) 
Exception Codes: KERN_INVALID_ADDRESS at 0x67696c69 

क्या इसके लायक है के लिए, दोनों इस का पता लगाने के लिए है

Thread 0 Crashed: 
0 libobjc.A.dylib     0x30011940 objc_msgSend + 20 
1 UIKit       0x30940174 -[UIWindow _shouldAutorotateToInterfaceOrientation:] + 60 
2 UIKit       0x30a223d8 -[UIWindow _updateToInterfaceOrientation:duration:force:] + 36 
3 UIKit       0x30958638 -[UIWindow _updateInterfaceOrientationFromDeviceOrientation] + 112 
4 UIKit       0x30942514 -[UIWindow _handleDeviceOrientationChange:] + 72 
5 Foundation      0x3054dc7a _nsnote_callback + 178 
6 CoreFoundation     0x3024ea52 _CFXNotificationPostNotification + 298 
7 Foundation      0x3054b854 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64 
8 UIKit       0x309414a4 -[UIDevice setOrientation:] + 124 
9 UIKit       0x30938330 -[UIApplication handleEvent:withNewEvent:] + 5232 
10 UIKit       0x30936ce8 -[UIApplication sendEvent:] + 60 
11 UIKit       0x30936874 _UIApplicationHandleEvent + 4336 
12 GraphicsServices    0x32046964 PurpleEventCallback + 1028 
13 CoreFoundation     0x30254a70 CFRunLoopRunSpecific + 2296 
14 CoreFoundation     0x30254164 CFRunLoopRunInMode + 44 
15 GraphicsServices    0x3204529c GSEventRunModal + 188 
16 UIKit       0x308f0374 -[UIApplication _run] + 552 
17 UIKit       0x308eea8c UIApplicationMain + 960 
18 MyApp       0x00015e24 0x1000 + 85540 
19 MyApp       0x0000f138 0x1000 + 57656 

इसके अलावा, मैं अपने कोड में कहीं भी "shouldAutorotateToInterfaceOrientation:" विधि को लागू नहीं करता हूं।

+1

क्या आपको पता चला कि इस विशेष समस्या का कारण क्या था? मैं इस पर एक समान बैकट्रैक के साथ एक दुर्घटना डीबग करने की कोशिश कर रहा हूं, और आपका समाधान मुझे सही दिशा में इंगित कर सकता है। –

+2

नाथन, मुझे 100% यकीन नहीं है कि यह इस मुद्दे के लिए ठीक था, लेकिन मैं समय-समय पर इंटरफ़ेस बिल्डर से तुरंत UIViewController जारी कर रहा था। मैंने MPMoviePlayerController के माध्यम से मूवी चलाने से पहले इंटरफ़ेस को एनिमेट करने वाले रीराइटिंग कोड समेत कई अन्य परिवर्तन भी किए हैं। फिक्स के इस बैच के बाद से, मेरे परीक्षकों ने इस मुद्दे की रिपोर्ट नहीं की है। शुभकामनाएं ... यह ट्रैक करना मुश्किल हो सकता है। – davidcann

+1

ठीक है, डेविड के सिर के लिए धन्यवाद। मैं अभी तक समस्या का समाधान करने के लिए है, लेकिन मैं दो संसाधनों पाया आप रुचि हो सकती है में: http://sealiesoftware.com/blog/archive/2008/09/22/objc_explain_So_you_crashed_in_objc_msgSend.html http: // sealiesoftware .com/ब्लॉग/संग्रह/200 9/06/08/objc_explain_So_you_crashed_in_objc_msgSend_iPhone_Edition.html –

उत्तर

41

EXC_BAD_ACCESS (SIGBUS) KERN_PROTECTION_FAILURE का अर्थ है कि वर्चुअल पता स्पष्ट रूप से गलत है: अधिकांश CPUs को एक निश्चित बाइट सीमा पर स्मृति तक पहुंच प्राप्त करनी चाहिए। चूंकि यहां आपके डेटा का उपयोग 64-बिट मान (8) के लिए गठबंधन किया गया है, इसलिए यह 128-बिट मान प्राप्त करने वाले निर्देश को निष्पादित करने का प्रयास कर रहा है (जैसे तुलना और विनिमय निर्देश CMPXCHG16B)। किसी भी मामले में, आप यहां उदाहरण से देख सकते हैं कि यह 0x00000008 है, जिसका शायद मतलब है कि आप एक संरचना तत्व तक पहुंच रहे हैं जो शुरुआत से 8 बाइट ऑफ़सेट करता है, लेकिन आपकी संरचना सूचक NULL है।

EXC_BAD_ACCESS (SIGSEGV) KERN_INVALID_ADDRESS का अर्थ है कि आप जिस वर्चुअल पते को रेफरेंसिंग कर रहे हैं वह पेज टेबल में नहीं है या आपके पास पहुंच नहीं है। यह एक आभासी पता है जिसे आपको एक्सेस करने की अनुमति नहीं है। आपके उदाहरण पते के पते के लिए 0x67696c69 यह संभावना है कि यह ऐसा कुछ है जो एक सूचक नहीं है जिसे पॉइंटर की तरह माना जाता है; या आपकी डेटा संरचना जिसमें पॉइंटर शामिल है उसे फ्री किया गया था और अन्य डेटा के साथ अधिलेखित किया गया था।

आपके KERN_INVALID_ADDRESS उदाहरण के लिए, पॉइंटर डेटा ASCII 'ilig' (क्योंकि यह थोड़ा एंडियन है) का मंत्रमुग्ध करता है। इसलिए स्मृति जहां आपका पॉइंटर संग्रहीत किया गया था, संभवतः किसी प्रकार की स्ट्रिंग के साथ अधिलेखित किया गया था।

दोनों मामलों में, यह संभावना है कि कुछ आपके UIWindow में डेटा संरचनाओं को ओवरराइट करें।

+0

धन्यवाद, जेरेड। यह सहायक है। – davidcann

+5

"... आप एक संरचना तत्व तक पहुंच रहे हैं जो शुरुआत से 8 बाइट ऑफसेट कर रहा है, लेकिन आपका स्ट्रक्चर पॉइंटर' NULL' है। "ऐसा करने का एक तरीका है 'nil'' self' को असाइन करना, फिर इंस्टेंस तक पहुंचने का प्रयास करें चर।यह 'init' विधियों में सबसे अधिक संभावना है, क्योंकि यह एकमात्र ऐसा स्थान है जहां आप 'स्वयं' को असाइन करने की संभावना रखते हैं। –

+0

@ पीटर होसे - संरचना सूचक क्या है? कैसे नियुक्त करने से समस्या हल हो जाएगी .. क्या आप कृपया समझा सकते हैं? –

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