NSObjCMessageLoggingEnabled مع اي فون 3.0
-
06-07-2019 - |
سؤال
وأنا تصحيح برنامج التي تم كتابتها ل iPhone OS 2.2.1 ولديه إلى إعادة صياغة قليلا عن 3.0. أن وجود قائمة من جميع المكالمات رسالة الهدف-C التي تبذل، بما في ذلك "وراء الكواليس" المكالمات، يكون من المفيد جدا.
ولقد وجدت NSObjCMessageLoggingEnabled على موقع على شبكة الانترنت، ولكن لست متأكدا ما اذا كان يعمل مع اي فون. لا أحد يعرف إذا / كيف يعمل هذا، وإذا لم يكن كذلك، إذا كان هناك طريقة أخرى يمكنني أن تحقيق نفس الشيء؟
وشكرا!
المحلول
وأنا أحسب أخيرا خارج بسيطة نسبيا (وإن لم يكن أنيقة على الإطلاق) طريقة للقيام بذلك.
وأثناء تصحيح على اي فون، أقوم بإعداد نقطة توقف لobjc_msgSend. وبعد ذلك كتبته في هذا السيناريو GDB بسيط:
while 1
printf "[%s %s]", (char *)object_getClassName($r0), (char *) $r1
c
end
وهذا بطباعة كل استدعاء الأسلوب. انها ليست مثالية، لأنه بطباعة اسم فئة الكائن يتم إرسال الرسالة إليه، وليس هدف في حد ذاته، ولكنه يعمل لما احتاجه.
ملاحظة هذا سوف تعمل فقط على اي فون نفسها.
نصائح أخرى
وNSObjCMessageLoggingEnabled
(وinstrumentObjcMessageSends(BOOL)
توأمه) المتوفرة في جهاز محاكاة، ولكن ليس على الجهاز.