لماذا يحصل برنامج الكاكاو الخاص بي على EXC_BAD_ACCESS أثناء بدء التشغيل؟

StackOverflow https://stackoverflow.com/questions/64881

  •  09-06-2019
  •  | 
  •  

سؤال

أثناء تحميل تطبيق الكاكاو الخاص بي، يتعطل برنامجي مع ظهور الرسالة EXC_BAD_ACCESS.تتبع المكدس غير مفيد.هل هناك أي أدلة حول كيف يمكنني العثور على المشكلة؟

هل كانت مفيدة؟

المحلول

لقد رأيت أوقاتًا يمكن أن يحدث فيها هذا عندما تحاول الوصول إلى كائن لم تحتفظ به بشكل صحيح، لذا فهو إما لا يشير إلى نسخة صالحة من الكائن الخاص بك أو يشير إلى كائن من نوع آخر.إن وضع نقاط التوقف مبكرًا وتحليل الكائنات أثناء بدء التشغيل باستخدام po والطباعة في gdb هو أفضل رهان لك.

نصائح أخرى

يشير هذا عادةً إلى وجود خطأ في إدارة الذاكرة.

تأكد من أن جميع إعلانات منفذك تتبع أفضل الممارسات:

@interface MyClass : MySuperclass {
    UIClass *myOutlet;
}
@property (nonatomic, retain) IBOutlet UIClass *myOutlet;
@end

يضمن هذا التنسيق حصولك على إدارة الذاكرة مباشرة على أي نظام أساسي مع أي فئة فائقة.

تحقق من أي awakeFromNib طرق للتأكد من عدم الإفراط في إطلاق الكائنات وما إلى ذلك.

رد جديد على موضوع قديم...في XCode 4، الطريقة الأكثر فعالية لتشخيص استثناءات EXC_BAD_ACCESS هي استخدام الأدوات لملف تعريف تطبيقك (من XCode، انقر فوق المنتج/الملف الشخصي واختر Zombies).سيساعدك هذا في تحديد الرسائل المرسلة إلى الكائنات غير المخصصة.

للإضافة:السبب الأول في الفشل في إلغاء التغلب هو نسيان "العودة الذاتية" ؛ من -في فئة مخصصة.يؤلمني كثيرا :(

تحقق من سجل وحدة التحكم (Applications/Utilities/Console.app).عندما يتعطل البرنامج عند بدء التشغيل، ويكون هناك خطأ ما في عملية التهيئة، فإنه غالبًا ما يكتب بعض رسائل الخطأ المفيدة هناك، قبل أن يتعطل.

هذا هو أحد الأسباب المحتملة.يوجد كائن IBOutlet لم تتم تهيئته ويتم استدعاء رسالة عند الصفر.قد يبدو تتبع المكدس كما يلي:

#0    0x90a594c7 in objc_msgSend
#1    0xbffff7b8 in ??
#2    0x932899d8 in loadNib
#3    0x932893d9 in +[NSBundle(NSNibLoading) _loadNibFile:nameTable:withZone:ownerBundle:]
#4    0x9328903a in +[NSBundle(NSNibLoading) loadNibFile:externalNameTable:withZone:]
#5    0x93288f7c in +[NSBundle(NSNibLoading) loadNibNamed:owner:]
#6    0x93288cc3 in NSApplicationMain
#7    0x00009f80 in main at main.mm:17

نظرًا لأن تتبع المكدس ليس مفيدًا، فسيتعين عليك التنقل خلال التعليمات البرمجية الخاصة بك للعثور على الخطأ.إذا لم تتمكن لسبب ما من تعيين نقاط التوقف في وقت مبكر من التنفيذ، فحاول إدراج بعض Debugger()؛المكالمات التي سوف تنقطع إلى المصحح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top