أدوات كشف تسرب الذاكرة
-
02-07-2019 - |
سؤال
هل توفر بيئة تطوير Xcode الخاصة بشركة Apple أي أدوات لاكتشاف تسرب الذاكرة؟
أنا مهتم بشكل خاص بالأدوات التي تنطبق على iPhone SDK.حاليا منصتي المفضلة لمشاريع برمجة الهوايات
الوثائق/البرامج التعليمية للأدوات المذكورة ستكون مفيدة للغاية.
المحلول
هناك واحد يسمى على وجه التحديد Leaks
وكما ذكر أحد الملصقات السابقة، فإن أسهل طريقة لتشغيله هي مباشرة من Xcode:
تشغيل -> البدء باستخدام أداة الأداء -> التسريبات
يبدو الأمر جيدًا جدًا في اكتشاف تسرب الذاكرة، وكان من السهل على الأشخاص غير المتخصصين في لغة C اكتشافه مثلي.
نصائح أخرى
يختار Profile
من Product
القائمة في Xcode 6 لتشغيل أداة Apple Instruments.(يوجد التطبيق داخل محتويات حزمة تطبيق Xcode: /Applications/Xcode.app/Contents/Applications/
)
البديل التجاري هو OmniObjectMeter. (أوقفتها مجموعة أومني)
ال Clang Static Analyser
يعد أمرًا رائعًا للعثور على الأخطاء في أكواد C وC++ وObjective-C:
إليك الرابط لاستخدام أداة من xcode لاكتشاف تسرب الذاكرة/أداء تطبيق ios/macخطوات تشغيل الأداة من Xcode
يمكنك تشغيل الأدوات داخل Xcode menu -> run -> start with performance tool -> ...
هل توفر بيئة تطوير Xcode الخاصة بشركة Apple أي أدوات لاكتشاف تسرب الذاكرة؟
أنا مهتم بشكل خاص بالأدوات التي تنطبق على iPhone SDK.
نعم.تسميها Apple "الأدوات" (هناك أكثر من مجرد أدوات الذاكرة).
انظر أبل Introduction to Instruments User Guide
.على وجه الخصوص، راجع Locating Memory Issues in Your App
.وهو يوفر أمثلة حول كيفية استخدام قوالب التتبع الموجهة للذاكرة.
من المفترض أن يساعدك كل من ObjectAlloc وMallocDebug.إذا قمت بتثبيت حزمة SDK بأكملها، فسيتم العثور عليها في المطور->التطبيقات->أدوات الأداء.
تمنحك أسمائهم فكرة جيدة جدًا عن وظائفهم، OA، يتعقب الكائنات التي يتم إنشاؤها، وMA هي أداة عامة لتسرب الذاكرة.
لم أجربهم مع تطوير iPhone بعد، لكن يجب أن أصدق أنهم سيعملون هناك أيضًا.
بافتراض أنك قمت بالتسجيل في موقع مطور ADC iPhone، إليك الرابط التالي:Instruments User Guide
عند الاستخدام rustyshelf's solution
تأكد من الاختبار على iPhone وليس على جهاز المحاكاة.يختلف استخدام الذاكرة بشكل كبير.
تم تلخيص أدوات تسرب الذاكرة الرئيسية: iphone-essential-performance-tools-list
جرب هذا أيضًا، وهو برنامج تعليمي بسيط للبدء باستخدام أدوات Xcode
أداة تسرب الذاكرة: http://www.raywenderlich.com/2696/
أساسي: http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode
الخطوة 1.اختر أداة التخصيصات
- اختر قالب ملف التعريف للتخصيصات:
- على واجهة الأدوات الرئيسية، انقر فوق VM Tracker، إذا كان موجودًا، ثم اضغط على مفتاح الحذف (Delete) نظرًا لأنك لن تحتاج إلى هذه الأداة المحددة:
من خلال النقر على زر علامة الزائد في الجزء العلوي الأيمن، يمكنك إضافة المزيد من الأدوات لأنواع مختلفة من الاختبارات، لكنني لن أغطيها في هذا البرنامج التعليمي.
الخطوة 2.قم بإعداد إعدادات الأدوات الخاصة بك
قبل إجراء أي تحليل، هناك بعض الأشياء التي يتعين عليك القيام بها.أولاً، تحتاج إلى توصيل جهاز iOS المثبت عليه تطبيقك.يجب أن يكون جهازًا فعليًا لأن iOS Simulator لا يزال محاكيًا وقد لا يمثل بدقة استخدام الذاكرة في تطبيقك أو كيفية أداء التطبيق تحت ضغط الذاكرة.
لاختيار هدفك، انقر فوق جهاز الكمبيوتر الخاص بي بالقرب من الجزء العلوي، قم بالتمرير فوق جهازك، ثم اختر تطبيقك من القائمة الفرعية:
بعد ذلك، هناك لوحة يمكنك من خلالها تغيير الإعدادات الخاصة بأنواع التخصيصات التي ستعرضها.بالإضافة إلى التأكد من خلق ومستمر تم تحديد الفقاعة، ليس هناك الكثير مما عليك القيام به مسبقًا.
الخطوه 3.اضغط على "تسجيل" لتشغيل الأداة
بمجرد الضغط على زر التسجيل في الجزء العلوي الأيسر، سيبدأ تشغيل تطبيقك على جهازك، وستبدأ الآلات في رسم تخصيصاتك.كل ما عليك فعله هنا هو تشغيل تطبيقك، مع التركيز على مناطق المشاكل المحتملة لمعرفة ما إذا كان يتم تخصيص ذاكرة أكثر من إلغاء التخصيص.قد يعني هذا القيام بالكثير من المهام المتكررة، لكنك ستشكر نفسك لاحقًا.
يجب أن نرى شيئا من هذا القبيل:
أوصي بتشغيل تطبيقك مرة واحدة والوصول إلى نقطة مستقرة في الذاكرة حتى يكون لديك خط أساس جيد سيجعل أي زيادة ملحوظة.عندما تكون مقتنعًا بأن لديك ما يكفي من البيانات للاختبار، اضغط على زر الإيقاف في الجزء العلوي الأيسر.
الخطوة 4.تحليل
- أول شيء أفعله هو تعيين نطاق الفحص الخاص بي لقياس إجمالي البايتات المستمرة عند خط الأساس الخاص بي.يوجد رقم البايت المستمر هذا أسفل ملخص التخصيص مباشرةً.
لتعيين نطاق الفحص فعليًا، استخدم اختصار لوحة المفاتيح الأمر < لنطاق التفتيش الأيسر و الأمر > لنطاق التفتيش الصحيح.في تطبيقنا، لدينا خط أساسي يبلغ حوالي 20 ميغابايت.
- بعد ذلك، أقوم بنقل نطاق الفحص الأيمن إلى النقطة التي قمت فيها بتشغيل التطبيق مرة أخرى وعدت إلى الجذر.هنا، يمكنك أن ترى أن الذاكرة هي نفسها تقريبًا.لذا، من خلال القيام بذلك عدة مرات أخرى ورؤية ذاكرتك تعود إلى خط الأساس لدينا، يمكنك افتراض عدم وجود مشكلات كبيرة في الذاكرة.
هناك طرق مختلفة لتحليل هذه البيانات لن أغطيها هنا، ولكن انتبه إلى أن هناك قائمة منسدلة كاملة لطرق عرض بياناتك وتحليلها.
الخطوة 5.بمناسبة الأجيال
إذا كنت تفضل عدم التعامل مع نطاقات الفحص كثيرًا، فهناك ميزة تسمى Mark Generation.يوجد زر خاص به على اللوحة اليمنى للأدوات.
سيحدد هذا الزر النقاط على المخطط الزمني للأدوات بناءً على مكان وجود خط الفحص.وذلك من أجل متابعة كافة التخصيصات منذ العلامة السابقة، أو من البداية في حالة عدم وجود علامات أخرى.يمكنك وضع علامة على الأجيال أثناء قيامك بتشغيل أداة التخصيص أو بعد إيقاف التشغيل، كما في هذا المثال:
الخطوة 6.تحقق من تتبع المكدس
آخر شيء يجب تغطيته هو النظر إلى تتبع المكدس.لهذا، تريد تعيين نطاق الفحص الخاص بك لتسليط الضوء على كافة التخصيصات، ثم إلقاء نظرة على عرض الإحصائيات، والتأكد من خلق ومستمر تم تحديد الفقاعة على اللوحة اليمنى.في عرض الإحصائيات، تأكد من فرز وحدات البايت الدائمة من الأعلى إلى الأدنى.هناك الكثير من التخصيصات هنا، وقد يكون من الصعب فهم ما يجري، نظرًا لأن الكثير منها عبارة عن تخصيصات للنظام.
الذهاب عميقا
- انظر إلى أكبر التخصيصات وانقر على السهم المتجه لليمين.في كثير من الأحيان، ستكون هناك تخصيصات داخل تلك التي نقرت عليها ولن يكون للكثير منها أي معنى بالنسبة لك.
- بينما تقوم بتمييز تخصيصات مختلفة بعد النقر فوق السهم، استمر في النظر إلى التفاصيل الموسعة على اللوحة اليمنى.في النهاية، ستصادف بعض النصوص الغامقة التي تؤدي إلى تعليمات برمجية فعلية في مشروعك، وتخبرك بالمشكلة المحتملة.
- إذا نقرت نقرًا مزدوجًا فوق أحد العناصر الغامقة في تتبع المكدس، فسوف يأخذك إلى الكود الفعلي (بافتراض أنك قمت بتشغيل عمليات التخصيص على تطبيق تملكه).
هناك الكثير من الأشياء المفيدة حول هذا العرض، أحدها العلامات الصفراء في الغالب على اليمين والتي توضح لك مقدار الذاكرة التي يستهلكها كل استدعاء أسلوب.يختلف كل تطبيق عن الآخر، لذا يتعين عليك، كمطور، أن تقرر ما إذا كانت الطريقة المميزة تمثل مشكلة، أو شيء يمكنك تحسينه، أو مجرد جزء لا مفر منه من تطبيقك.
في حالتي، يعد متغير UIColor هذا أمرًا ثابتًا ويتم استخدامه في جميع أنحاء تطبيقنا، وبالتالي فهو مقبول طوال عمر تطبيقنا.