Xcode والتصحيح المتقدم في LLDB: الجزء 1

مساء الخير ، أقترح عليك اليوم أن تتعرف على ترجمة مقال حول تصحيح أخطاء تطبيقات iOS باستخدام LLDB.

تم تقديم أحد أكثر الأجزاء إثارة للاهتمام في العرض التقديمي WWDC 2018 و Xcode والتصحيح المتقدم في LLDB بواسطة مهندسي Apple. لقد قدموا بعض النصائح المفيدة حول كيفية استخدام نقاط التوقف في Xcode ومصحح الأخطاء المنخفض المستوى (LLDB) لتحسين عملية تصحيح الأخطاء ، أينما اكتشفها المطور.

تتكون المقالة من ثلاثة أجزاء ، سنتطرق إلى النقاط الرئيسية التي قيلت في WWDC. لقد قمتُ بإنشاء مشروع تجريبي خصيصًا لفهم كيفية استخدام أنواع مختلفة من نقاط التوقف (نقاط التوقف) بشكل أفضل مع LLDB لالتقاط الأخطاء وتصحيحها في التطبيق الخاص بك.

مشروع تجريبي

لقد قمت بإنشاء مشروع مهمة قالب قابله كل مطور لنظام iOS بطريقة أو بأخرى. من المهم للغاية فهم كيف تعمل قبل الخوض في قراءة المقال. فيما يلي الوظائف الرئيسية للمشروع التجريبي:

  • عند الفتح ، نرى وحدة تحكم في عرض الجدول تقوم بتحميل قائمة المنشورات.
  • عند التمرير لأسفل ، يقوم جهاز التحكم في عرض الجدول بتحميل المشاركات الجديدة.
  • في المجموع ، يمكنك تحميل المشاركات 7 مرات .
  • يمكنك تحديث قائمة المنشورات عن طريق السحب لأسفل باستخدام وحدة تحكم التحديث (المنسدلة للتحديث).
  • يوجد في شريط التنقل بالأعلى تصنيفان (ملصقات) تُظهر عدد المنشورات التي تم تنزيلها (التصنيف الصحيح) وعدد المرات التي قام فيها المستخدم بالفعل بتحميل المشاركات (التصنيف الأيسر).

يمكنك تنزيل المشروع التجريبي من هنا إذا كنت تفضل Objective-C.

إذا كنت تفضل Swift ، ثم من هنا .

إطلاق Xcode ودعونا نذهب!

البق لإصلاح!

لذلك ، تعرفت على المشروع وربما لاحظت الأخطاء التالية:

  • عند سحب الجدول لأسفل ، لا يقوم التحديث بتحديث المشاركات.
  • لا يتلقى المستخدم أي إخطار (باستخدام وحدة التحكم في التنبيه) بأن طلب HTTP لم يكتمل بسبب مشاكل في الاتصال.
  • يمكنك تحميل المشاركات أكثر من 7 مرات.
  • لا يعمل المؤشر الأيسر (التسمية) في شريط التنقل ، وهو المسؤول عن حساب عدد التنزيلات.

قاعدة مهمة: حتى نهاية هذه المقالة ، لا توقف المترجم ولا تقوم بإعادة تشغيل التطبيق بعد الإطلاق الأول. قمت بتصحيح الأخطاء أثناء تنفيذ البرنامج.

قوة فرق التدريس

دعنا ننكب على الخطأ الأول.

1. عند سحب الجدول لأسفل ، لن يتم تحديث المنشورات.

كيفية إعادة إنتاج الخطأ:

  • قم بتشغيل التطبيق ، يتم بالفعل تحميل أول 10 مشاركات.
  • انتقل لأسفل لتحميل المزيد من الوظائف.
  • قم بالتمرير لأعلى إلى بداية الجدول واسحبه إلى أسفل للتحديث.
  • لا يتم تحميل المنشورات الجديدة والوظائف القديمة لا تختفي ، ولا تتم إعادة تعيين عداد المنشورات.

يتضمن النهج القياسي لتصحيح مثل هذه الأخطاء فحص ما يحدث داخل محدد الطريقة المسؤول عن UIRefreshControl في جدولنا. انتقل إلى PostsTableViewController في قسم دعم عملية تحديث عنصر التحكم . من وظيفة setupRefreshControl ، يمكننا أن نستنتج أن المحدد المسؤول عن تحديث المنشورات هو وظيفة reloadNewPosts . دعونا نضيف نقطة توقف إلى السطر الأول من هذه الوظيفة ومعرفة ما يحدث بالضبط هنا. انتقل الآن لأعلى إلى بداية الجدول واسحب الشاشة للتحديث.

الصورة
الهدف ج

الصورة
سويفت

توقف مصحح الأخطاء عند نقطة الإيقاف التي تقوم بتعيينها. لمزيد من الدراسة ، انقر فوق الزر "تخطي كتلة" المصحح.

الصورة
الهدف ج

الصورة
سويفت

الآن لدينا فهم لما يجري!

لم يتم استيفاء الشرط "if" (أي ، المتغير المنطقي isPullDownToRefreshEnabled تم تعيينه على NO) ونتيجة لذلك ، يتم تخطي رمز تحديث المنشورات.

تتضمن الطريقة القياسية إيقاف المحول البرمجي ، ثم تحتاج إلى ضبط isPullDownToRefreshEnabled كـ YES / true وهذا سيؤدي إلى حل المشكلة. ولكن سيكون أكثر ملاءمة لاختبار فرضيتنا أولاً قبل إجراء أي تغييرات على التعليمات البرمجية ودون الحاجة إلى إيقاف المترجم. هذا هو المكان الذي تظهر فيه أوامر تعليمات مصحح الأخطاء لتكون مفيدة للغاية.

انقر نقرًا مزدوجًا على نقطة الإيقاف المثبتة أو انقر بزر الماوس الأيمن على "تحرير نقطة الإيقاف" وانقر فوق الزر "إضافة إجراء". حدد أيضًا نوع الإجراء "Command Debugger Command".

الصورة

الآن نحن بحاجة إلى تعيين الخاصية isPullDownToRefreshEnabled كـ YES / true. أضف الأمر التالي إلى المصحح.

الهدف ج

expression self.isPullDownToRefreshEnabled = YES 


الصورة

سويفت

 expression self.isPullDownToRefreshEnabled = true 

الصورة

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

فويلا ، الوظائف الجديدة التي تم تحميلها واستبدالها بالوظائف القديمة ، وبالتالي ، تم تحديث عداد النشر.

لقد حللنا المشكلة الأولى ، وحصلنا على سلاحك المضاد للأخطاء ، وننتقل إلى المشكلة الثانية.

2. لا يتلقى المستخدم أي إخطار (باستخدام وحدة التحكم في التنبيه) بأن طلب HTTP لم يكتمل بسبب مشاكل في الاتصال.

كيفية إعادة إنتاج الخطأ:

  • افصل اتصال الإنترنت في جهاز iPhone / جهاز محاكاة.
  • مرر لأعلى إلى بداية الجدول واسحب لأسفل للتحديث.
  • لن يتم تنزيل المشاركات الجديدة بسبب خطأ في الاتصال بالإنترنت.
  • لا يظهر المستخدم أي إشعار خطأ.

انتقل إلى PostsTableViewController في قسم شبكة pragma . لديها بالضبط وظيفة loadPosts واحدة. يستخدم مثيل مدير شبكة مشترك لتنفيذ طلب HTTP GET يقوم بإرجاع مجموعة من المنشورات من خلال معالج إتمام "النجاح" أو NSError من خلال معالج إتمام "الفشل".

نحتاج إلى إضافة الرمز إلى الإغلاق "غير الناجح" من أجل عرض وحدة تحكم التنبيه. إذا انتقلت إلى قسم دعم علامة البراغمات ، سترى أن هناك بالفعل وظيفة PresentNetworkFailureAlertController تكون مسؤولة عن عرض جهاز التحكم في التنبيه المطلوب. كل ما نحتاج إليه هو استدعاء هذه الوظيفة داخل "فشل" الإغلاق في loadPosts .
الطريقة التقليدية هي إيقاف المحاكاة وإضافة الكود المطلوب. دعنا نذهب في الاتجاه الآخر!

أضف نقطة توقف داخل الإغلاق "غير الناجح" بعد السطر

الهدف ج

 [self updateUIForNetworkCallEnd]; 

سويفت

 self.updateUIForNetworkCallEnd() 

انقر نقرًا مزدوجًا على نقطة الإيقاف المثبتة أو انقر بزر الماوس الأيمن على "تحرير نقطة الإيقاف" وانقر فوق الزر "إضافة إجراء". حدد أيضًا نوع الإجراء "Command Debugger Command".

أضف الأمر التالي إلى المصحح.

الهدف ج

 expression [self presentNetworkFailureAlertController] 

الصورة

سويفت

 expression self.presentNetworkFailureAlertController() 

الصورة

تحقق من تحديد مربع الاختيار "المتابعة تلقائيًا بعد تقييم الإجراءات".
عند إيقاف تشغيل الإنترنت ، قم بالتمرير لأعلى إلى بداية الجدول واسحب لأسفل للتحديث ، أو يمكنك التمرير لأسفل إلى نهاية الجدول ومحاولة تحميل منشورات جديدة. إليك ما سترى:

الصورة

ما فعلناه للتو يسمى " حقن " الكود باستخدام أمر تمت إضافته إلى المصحح عند نقطة توقف محددة.

ملخص صغير

دعونا نسرد مرة أخرى ما يمكننا فعله بأوامر مصحح الأخطاء المضافة إلى نقطة الإيقاف:

  • تعمل مع قيمة الممتلكات الحالية.
  • إضافة سطر جديد من التعليمات البرمجية.

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

ماذا بعد؟

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

Source: https://habr.com/ru/post/ar431506/


All Articles