إعادة طرح NSException باستخدام مكدس خاطئ في مصحح الأخطاء

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

  •  12-11-2019
  •  | 
  •  

سؤال

عندما أتعطل (لأسباب أفهمها؛هذه ليست المشكلة) عندما أحاول القيام بشيء لا يناسبه Cocoa، مثل استدعاء طريقة غير موجودة أو محاولة إدراج nil في مجموعة، يعرض مصحح الأخطاء المكدس من main() إلى __pthread_kill، بدون أي من الإطارات التي كانت موجودة عند تشغيل كود التعطل الفعلي.يوجد إطار (التاسع من الرئيسي) يسمى objc_exception_rethrow.هذا يقودني إلى الاعتقاد بأن Cocoa Touch تحاول القيام بشيء أو آخر لاستعادة جميع الاستثناءات والموت بأمان أو شيء من هذا القبيل.ومع ذلك، فمن المزعج جدًا عند تصحيح الأخطاء عدم القدرة على استخدام أدوات تصحيح أخطاء Xcode4 فعليًا للتحقق من إطارات مكدس الاستدعاء، أو حتى معرفة مكان التعطل في الكود الخاص بي.

هل هناك طريقة ما لمنع حدوث سلوك objc_exception_rethrow، وتعطله بمجرد ظهور الاستثناء؟ربما يكون هناك إعداد تصحيح يؤدي إلى تعطله مبكرًا (في ملف يمين وقت)؟(لم أعبث بأي من إعدادات البناء في هذا المشروع حتى الآن.)

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

المحلول 2

لقد وجدت الجواب:قم بتعيين نقطة توقف على استثناءات Obj-C.سينتقل إلى مصحح الأخطاء عند الضغط على objc_exception_throw، وهو أمر جيد.لسوء الحظ، يحدث هذا قبل طباعة الاستثناء، ولكن يمكننا تحقيق ذلك على أي حال (في معظم الأحيان) عن طريق تعيين إجراء نقطة التوقف ليكون (Debugger Action) po *(id *)($ebp + 8).

نصائح أخرى

لا أعرف أي إعداد Xcode يمكن أن تعطيل استثناءات إعادة رمي.على حد علمي يتم إعادة إلقاؤها بواسطة وقت التشغيل.يمكنك محاولة تشغيل التطبيق بدون مصحح الأخطاء ودعها تعطل.يجب أن يحتوي تقرير التعطل على قسم "آخر استثناء Backtrace" الذي سيمنحك بالضبط ما تحتاجه في هذه الحالة.

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