تصحيح أخطاء تطبيقك

يوفّر "استوديو Android" برنامج تصحيح أخطاء يتيح لك إجراء ما يلي وغير ذلك:

  • اختَر جهازًا لتصحيح أخطاء تطبيقك عليه.
  • عيِّن نقاط التوقف في رموز Java وKotlin وC/C++.
  • فحص المتغيّرات وتقييم التعبيرات في وقت التشغيل

تتضمّن هذه الصفحة تعليمات حول العمليات الأساسية لبرنامج تصحيح الأخطاء. لمزيد من الوثائق، أيضًا راجِع مستندات تصحيح الأخطاء لـ IntelliJ IDEA.

تفعيل تصحيح الأخطاء

قبل البدء في تصحيح الأخطاء، اتّبِع الخطوات التالية:

فعِّل تصحيح الأخطاء على جهازك.
في حال استخدام المحاكي، سيتم تفعيل تصحيح الأخطاء تلقائيًا. ولكن بالنسبة لجهاز متصل، يمكنك الحاجة إلى تفعيل تصحيح الأخطاء في مطوِّر الجهاز. الخيارات.
شغِّل نسخة إصدار قابلة للتصحيح.

استخدِم صيغة إصدار يشمل debuggable true (isDebuggable = true في النصوص البرمجية بلغة Kotlin) في إعدادات التصميم.

يمكنك عادةً اختيار الإعداد التلقائي "تصحيح الأخطاء" كل صيغة مضمّنة في كل "استوديو Android" المشروع، على الرغم من أنّه غير مرئي في ملف build.gradle. ومع ذلك، إذا تحديد أنواع الإصدارات الجديدة التي يجب تصحيح الأخطاء فيها، يجب إضافة السمة debuggable true مع نوع الإصدار:

Groovy

android {
    buildTypes {
        customDebugType {
            debuggable true
            ...
        }
    }
}

Kotlin

android {
    buildTypes {
        create("customDebugType") {
            isDebuggable = true
            ...
        }
    }
}

تنطبق هذه السمة أيضًا على الوحدات التي تحتوي على رمز C/C++.

ملاحظة: لم تعُد السمة jniDebuggable مُستخدَمة.

إذا كان تطبيقك يعتمد على وحدة مكتبة تريد أيضًا تصحيح أخطائها، يجب أن تتضمّن هذه المكتبة أيضًا مع debuggable true حتى تحتفظ برموز تصحيح الأخطاء الخاصة بها. لضمان تلقّي الصِيَغ القابلة للتصحيح في مشروع تطبيقك المتغير القابل للتصحيح وحدة مكتبة، انشر نسخًا غير افتراضية من مكتبتك.

بدء تصحيح الأخطاء

يمكنك بدء جلسة تصحيح الأخطاء على النحو التالي:

  1. اضبط نقاط الإيقاف في رمز تطبيقك.
  2. في شريط الأدوات، اختَر جهازًا لتصحيح أخطاء تطبيقك عليه من قائمة الجهاز الهدف.
    قائمة الأجهزة المستهدفة.
    الشكل 1. قائمة الأجهزة المستهدفة.

    إذا لم يسبق لك ضبط أي أجهزة، عليك تنفيذ أحد الإجراءَين التاليَين: توصيل جهاز عبر USB، ربط جهاز عبر شبكة Wi-Fi يجب إنشاء متوسّط مدة المشاهدة لاستخدام محاكي Android

  3. في شريط الأدوات، انقر على تصحيح الأخطاء .

    إذا كان التطبيق قيد التشغيل على الجهاز، سيظهر مربّع حوار يسألك ما إذا كنت تريد التبديل من تشغيل إلى تصحيح الأخطاء. يجب إعادة تشغيل الجهاز لبدء تصحيح الأخطاء. إلى الإبقاء على تشغيل المثيل نفسه للتطبيق، انقر على إلغاء تصحيح الأخطاء وبدلاً من ذلك إرفاق برنامج تصحيح الأخطاء بتطبيق قيد التشغيل. وبخلاف ذلك، يمكنك استخدام "استوديو Android" ينشئ حزمة APK ويوقّعها باستخدام مفتاح تصحيح الأخطاء ويثبّتها على الجهاز الذي اخترته ويشغلها.

    إذا كنت إضافة رمزَي C وC++ إلى مشروعك يشغّل "استوديو Android" أيضًا برنامج تصحيح الأخطاء LLDB في صفحة "تصحيح الأخطاء". لتصحيح أخطاء الرمز البرمجي الأصلي.

  4. إذا لم تكن نافذة تصحيح الأخطاء مفتوحة، حدِّد عرض > نوافذ الأدوات > تصحيح الأخطاء، أو انقر على رمز تصحيح الأخطاء في شريط نافذة الأدوات.

أرفِق برنامج تصحيح الأخطاء بتطبيق قيد التشغيل.

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

  1. انقر على إرفاق برنامج تصحيح الأخطاء بعملية Android .
  2. في مربع الحوار اختيار العملية، حدد العملية التي تريد نرفق برنامج تصحيح الأخطاء بها.
    1. إذا كنت تستخدم محاكيًا أو جهازًا جذرًا، يمكنك التحقق عرض كل العمليات للاطّلاع على جميع العمليات. على الجهاز الجذر، ستظهر كل هذه العمليات التي تعمل على الجهاز. ومع ذلك، لن يظهر هذا إلا على الجهاز الذي لم يتوفر له جذر والعمليات التي يمكن تصحيح الأخطاء بها.
    2. من القائمة استخدام إعدادات برنامج تصحيح الأخطاء في Android من، يمكنك اختيار ملف ضبط التشغيل/تصحيح الأخطاء. بالنسبة لرمز C وC++، يتيح لك ذلك إعادة استخدام أوامر بدء تشغيل LLDB وأوامر LLDB post-attach والرمز. الدلائل في تهيئة حالية.
    3. في حال عدم توفّر عملية تشغيل/تصحيح أخطاء حالية اختَر إنشاء جديد. يؤدّي هذا الاختيار إلى تفعيل نوع تصحيح الأخطاء حيث يمكنك اختيار نوع تصحيح أخطاء مختلف. من يستخدم "استوديو Android" تلقائيًا نوع تصحيح الأخطاء "الرصد التلقائي" لاختيار أفضل برنامج تصحيح الأخطاء استنادًا إلى ما إذا كان مشروعك يتضمن رمز Java أو C/C++
  3. انقر على موافق.

    ستظهر نافذة تصحيح الأخطاء.

علامة التبويب العمليات في Device Explorer (العرض > نافذة الأداة > مستكشف الجهاز) أيضًا قائمة بالعمليات التي يمكن تصحيح الأخطاء بها. اختَر عملية من هذا المنطلق ونفِّذ عملية قتل , فرض الإيقاف , أو إرفاق برنامج تصحيح الأخطاء بعملية معيّنة

نافذة تصحيح الأخطاء

الشكل 2.نافذة تصحيح الأخطاء

تنقسم نافذة تصحيح الأخطاء إلى

  1. شريط أدوات التنفيذ والتنقّل راجِع التعامل مع نقاط الإيقاف.
  2. أداة اختيار سلسلة المحادثات
  3. إدخال تعبير المشاهدة والتقييم راجِع فحص المتغيّرات.
  4. تجميع العرض
  5. لوحة "المتغيّرات". راجِع فحص المتغيّرات.

ملاحظة: يحتاج كل من برنامج تصحيح الأخطاء في "استوديو Android" وأداة تجميع البيانات المهملة إلى غير متكامل. يضمن جهاز Android الافتراضي أن يكون أي كائن الذي يدرك برنامج تصحيح الأخطاء أنّه لا يتم جمع البيانات المهملة إلا بعد أن ينتهي برنامج تصحيح الأخطاء وقطع اتصاله. وقد ينتج عن هذا تراكم الكائنات أثناء تم ربط برنامج تصحيح الأخطاء. على سبيل المثال، إذا رأى برنامج تصحيح الأخطاء سلسلة محادثات قيد التشغيل، Thread المرتبط لن يتم جمع العنصر المهمل إلى أن يتم إلغاء ربط برنامج تصحيح الأخطاء، حتى إذا تم إنهاء سلسلة التعليمات.

تغيير نوع برنامج تصحيح الأخطاء

ونظرًا لأن استخدام أدوات مصحح أخطاء مختلفة مطلوبة لتصحيح أخطاء رمز Java/Kotlin ورمز C/C++ ، يمكن استخدام يتيح لك برنامج تصحيح الأخطاء في "استوديو Android" اختيار نوع برنامج تصحيح الأخطاء الذي تريد استخدامه. "استوديو Android" بشكل تلقائي يحدد برنامج تصحيح الأخطاء المطلوب استخدامه بناءً على اللغات التي يتم اكتشافها في مشروعك باستخدام الرصد التلقائي لنوع برنامج تصحيح الأخطاء

لاختيار برنامج تصحيح الأخطاء يدويًا في ضبط تصحيح الأخطاء، انقر على تشغيل >. تعديل الإعدادات: يمكنك أيضًا تحديد برنامج تصحيح الأخطاء في مربّع الحوار الذي يظهر عند انقر على تشغيل > يُرجى إرفاق برنامج تصحيح الأخطاء بعملية Android.

تشمل أنواع تصحيح الأخطاء المتوفّرة ما يلي:

الرصد تلقائيًا
يمكنك اختيار نوع تصحيح الأخطاء هذا إذا أردت أن يختار "استوديو Android" الخيار الأفضل تلقائيًا. للتعليمة البرمجية التي تصححها. على سبيل المثال، إذا كان لديك أي رمز C أو C++ في مشروعك، يستخدم "استوديو Android" تلقائيًا أداة تصحيح الأخطاء المزدوجة الكتابة. وبخلاف ذلك، يستخدم "استوديو Android" نوع تصحيح الأخطاء "JavaScript فقط".
Java فقط
اختَر نوع تصحيح الأخطاء هذا إذا كنت تريد تصحيح أخطاء الرمز البرمجي المكتوب بلغة Java أو Kotlin فقط. لغة Java فقط يتجاهل برنامج تصحيح الأخطاء أي نقاط توقف أو يراقبك في الرمز البرمجي الأصلي.
محلي فقط (متاح فقط مع رمز C/C++)
اختَر نوع تصحيح الأخطاء هذا إذا كنت تريد استخدام ملف LLDB فقط لتصحيح أخطاء الرمز. عند استخدام هذه الميزة نوع تصحيح الأخطاء، فإن عرض جلسة برنامج تصحيح أخطاء Java غير متاح. بشكل افتراضي، يفحص LLDB الرمز البرمجي الأصلي فقط ويتجاهل نقاط التوقف في Java الرمز. إذا كنت تريد أيضًا تصحيح أخطاء رمز Java، عليك التبديل إلى أحد الخيارَين التاليَين: نوع تصحيح الأخطاء الكشف التلقائي أو الثنائي.

لا يعمل خيار "تصحيح الأخطاء الأصلي" إلا على الأجهزة التي تستوفي المتطلبات التالية:

  • يتوافق الجهاز مع "run-as".

    للتحقّق مما إذا كان الجهاز متوافقًا مع "run-as"، شغِّل الأمر التالي على واجهة ADB المتصلة بجهازك:

    run-as your-package-name pwd
    

    استبدِل your-package-name باسم حزمة تطبيقك. إذا كانت الجهاز متوافقًا مع run-as، فمن المفترض أن يتم عرض الأمر بدون أي أخطاء.

  • لقد تم تفعيل "ptrace" على الجهاز.

    للتأكّد من تفعيل ptrace، شغِّل الأمر التالي على ADB واجهة الأوامر المتصلة بجهازك:

    sysctl kernel.yama.ptrace_scope
    

    في حال تفعيل ptrace، سيطبع الأمر القيمة 0 أو خطأ unknown key. في حال عدم تفعيل ptrace، سيطبع قيمة أخرى بخلاف 0.

ثنائية (Java + أصلية) - متاحة فقط باستخدام رمز C/C++
اختر نوع تصحيح الأخطاء هذا إذا كنت تريد التبديل بين تصحيح أخطاء كل من Java والرمز البرمجي الأصلي. يُرفق Android Studio كلاً من برنامج تصحيح أخطاء Java وLLDB على تطبيقك. حتى تتمكن من فحص نقاط التوقف في كل من Java والرمز البرمجي الأصلي بدون إعادة تشغيل التطبيق أو تغيير إعدادات تصحيح الأخطاء

في الشكل 2، لاحظ علامتَي التبويب على يمين عنوان نافذة تصحيح الأخطاء. ونظرًا لأن التطبيق يحتوي على رمزي Java وC++ ، يمكن استخدام علامة تبويب واحدة لتصحيح الأخطاء والأخرى لتصحيح أخطاء رمز Java، كما هو موضّح في -java.

الشكل 3. علامة التبويب لتصحيح أخطاء الرمز البرمجي الأصلي وعلامة التبويب لتصحيح أخطاء رمز Java.

ملاحظة: أثناء تصحيح أخطاء الرمز البرمجي الأصلي الذي تم تحسينه من خلال برنامج تجميع البيانات، فقد تظهر لك رسالة التحذير التالية:
This function was compiled with optimizations enabled. Some debugger features may not be available. عند استخدام علامات التحسين، يقوم برنامج التحويل البرمجي بإجراء تغييرات على التعليمات البرمجية المجمعة لجعلها تعمل بشكل أكثر كفاءة. وقد يؤدي ذلك إلى تنفيذ برنامج تصحيح الأخطاء والإبلاغ عن معلومات غير متوقعة أو غير صحيحة لصعوبة برنامج تصحيح الأخطاء لإعادة ربط الرمز البرمجي المجمّع المحسّن برمز المصدر الأصلي. لهذا السبب، يجب إيقاف تحسينات برنامج التحويل البرمجي أثناء تصحيح الأخطاء التعليمات البرمجية الأصلية.

استخدام سجلّ النظام

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

كتابة رسائل السجل في الرمز الخاص بك

لكتابة رسائل السجلّ في الرمز الخاص بك، استخدِم فئة Log. المساعدة بشأن تسجيل الرسائل يمكنك فهم تدفق التنفيذ من خلال جمع ناتج تصحيح أخطاء النظام أثناء التفاعل مع تطبيقك. تخبرك رسائل السجل أيضًا بأي جزء من فشل التطبيق. لمزيد من المعلومات عن التسجيل، يُرجى مراجعة كتابة السجلّات وعرضها باستخدام أداة Logcat

يوضح المثال التالي كيفية إضافة رسائل السجل لتحديد ما إذا كانت الحالة السابقة تتوفّر المعلومات عندما يبدأ نشاطك:

Kotlin

import android.util.Log
...
class MyActivity : Activity() {
    ...
    override fun onCreate(savedInstanceState: Bundle?) {
        ...
        if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state")
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available")
            /* initialize app */
        }
        ...
    }
  ...
  companion object {
    private val TAG: String = MyActivity::class.java.simpleName
    ...
  }
}

Java

import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(Bundle savedInstanceState) {
       ...
       if (savedInstanceState != null) {
            Log.d(TAG, "onCreate() Restoring previous state");
            /* restore state */
        } else {
            Log.d(TAG, "onCreate() No saved state available");
            /* initialize app */
        }
        ...
    }
}

أثناء التطوير، يمكن للرمز البرمجي أيضًا رصد الاستثناءات وكتابة تتبُّع تسلسل استدعاء الدوال البرمجية في النظام. السجل:

Kotlin

fun someOtherMethod() {
    try {
        ...
    } catch (e : SomeException) {
        Log.d(TAG, "someOtherMethod()", e)
    }
}

Java

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

ملاحظة: يُرجى إزالة رسائل سجلّ تصحيح الأخطاء وطلبات طباعة تتبُّع تسلسل استدعاء الدوال البرمجية من الرمز عندما تكون مستعدًا لنشر التطبيق. لإجراء ذلك، يجب ضبط DEBUG. وضع علامة على رسائل سجل تصحيح الأخطاء ووضعها داخل العبارات الشرطية.

عرض سجلّ النظام

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

لاستخدام Logcat، ابدأ بتصحيح الأخطاء واختَر علامة التبويب Logcat.

الشكل 4. نافذة Logcat مع إعدادات الفلاتر

للحصول على وصف لـ Logcat وخيارات الفلترة فيه، اطّلِع على كتابة السجلّات وعرضها باستخدام أداة Logcat

العمل باستخدام نقاط الإيقاف

يتوافق "استوديو Android" مع نقاط الإيقاف التي تشغيل إجراءات مختلفة لتصحيح الأخطاء. هناك عدة أنواع من نقاط الإيقاف:

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

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

لإضافة نقطة فاصلة خطية، اتّبِع الخطوات التالية:

  1. حدِّد سطر الرمز الذي تريد إيقاف التنفيذ مؤقتًا فيه.
  2. انقر على هامش التوثيق الأيسر على طول سطر الرمز هذا أو ضع علامة الإقحام على الخط واضغط على Control+F8 (على أجهزة macOS وCommand+F8).
  3. إذا كان تطبيقك قيد التشغيل، انقر على إرفاق برنامج تصحيح الأخطاء بعملية Android. بخلاف ذلك، انقر على تصحيح الأخطاء لبدء تصحيح الأخطاء.

تظهر نقطة حمراء بجانب الخط عند تعيين نقطة توقف، كما هو موضح في الشكل 5.

الشكل 5. تظهر نقطة حمراء بجوار عند تحديد نقطة فاصلة

عندما يصل تنفيذ الرمز إلى نقطة الإيقاف، يوقف "استوديو Android" عملية تنفيذ تطبيقك مؤقتًا.

لتحديد حالة التطبيق، استخدِم الأدوات في علامة التبويب "برنامج تصحيح الأخطاء":

  • لفحص شجرة الكائن لمتغير، عليك توسيعه في طريقة عرض "المتغيّرات". في حال حذف إذا لم تكن طريقة عرض "المتغيّرات" مرئية، انقر على إعدادات التنسيق. وتأكد من يتم وضع علامة في المربّع بجانب المتغيّرات.

  • للانتقال إلى السطر التالي في الرمز بدون إدخال طريقة، انقر على خطوة أكثر من

  • للانتقال إلى السطر الأول داخل طلب طريقة، انقر على خطوة إلى .

  • للانتقال إلى السطر التالي خارج الطريقة الحالية، انقر على خطوة خارج المباراة .

  • لمواصلة تشغيل التطبيق بشكل طبيعي، انقر على استئناف البرنامج

إذا كان مشروعك يستخدم أي رمز برمجي أصلي، يتم ضبط نوع تصحيح الأخطاء "الرصد تلقائيًا" تلقائيًا. ترفق كل من برنامج تصحيح أخطاء Java وLLDB بتطبيقك باعتبارهما اثنين والعمليات. يمكنك التبديل بين فحص نقاط توقف Java وC/C++ بدون إعادة تشغيل التطبيق أو تغيير الإعدادات.

ملاحظة: لكي يتمكّن "استوديو Android" من رصد نقاط الإيقاف في رمز C أو C++ ، يُرجى اتّباع الخطوات التالية: يجب استخدام نوع تصحيح أخطاء يتوافق مع LLDB، مثل Detect تلقائيًا أو أصلي أو ثنائي. يمكنك تغيير نوع تصحيح الأخطاء الذي يستخدمه "استوديو Android" من خلال تعديل إعدادات تصحيح الأخطاء. إلى للمزيد من المعلومات حول أنواع تصحيح الأخطاء المختلفة، اطّلِع على القسم الذي يتناول استخدام أنواع تصحيح الأخطاء الأخرى.

عندما ينشر "استوديو Android" تطبيقك على جهازك المستهدَف، تظهر نافذة تصحيح الأخطاء يفتح مع عرض علامة تبويب أو جلسة تصحيح الأخطاء لكل عملية على برنامج تصحيح الأخطاء، على النحو الموضّح في الشكل 6.

الشكل 6. تصحيح أخطاء الرمز البرمجي الأصلي باستخدام LLDB.
  1. ينتقل "استوديو Android" إلى الوضع <your-module> عندما يواجه برنامج تصحيح الأخطاء LLDB نقطة توقف في رمز C/C++ الخاص بك. تعد الإطارات والمتغيرات تتوفر أجزاء الساعات أيضًا وتعمل تمامًا كما لو كانت يتم تصحيح أخطاء رمز Java.

    رغم عدم توفّر لوحة سلاسل المحادثات في عرض جلسة LLDB، يمكنك الوصول إلى عمليات تطبيقك باستخدام قائمة في جزء الإطارات. مزيد من المعلومات الأجزاء المتعلّقة بكيفية تصحيح أخطاء النافذة الإطارات وفحص المتغيّرات.

    ملاحظة: أثناء فحص نقطة توقف في الرمز البرمجي الأصلي، يعلّق نظام Android الجهاز الافتراضي الذي يشغِّل لغة Java في تطبيقك رمز البايت. وهذا يعني أنه لا يمكنك التفاعل مع لغة Java أو استرداد أي معلومات حالة من برنامج تصحيح أخطاء Java جلسة، أثناء فحص نقطة توقف في التعليمات البرمجية الأصلية.

  2. ينتقل "استوديو Android" إلى الوضع علامة تبويب <your-module>-java عند استخدام برنامج تصحيح أخطاء Java نقطة توقف في كود Java أو Kotlin.
  3. أثناء تصحيح الأخطاء باستخدام LLDB، يمكنك استخدام الوحدة الطرفية LLDB في عرض جلسة LLDB لتمرير خيارات سطر الأوامر إلى LLDB. إذا كانت لديك أسئلة الأوامر التي تريد من LLDB تنفيذها في كل مرة تبدأ فيها تصحيح الأخطاء تطبيقك، إما قبل أو بعد إرفاق برنامج تصحيح الأخطاء بـ عملية التطبيق، يمكنك وإضافة هذه الأوامر إلى إعدادات تصحيح الأخطاء.

أثناء تصحيح أخطاء رمز C/C++ ، يمكنك أيضًا تعيين أنواع خاصة من نقاط التوقف، تسمى نقاط المراقبة، يمكنها تعليق عملية تطبيقك عندما تتفاعل مع جزء معين من الذاكرة. لمزيد من المعلومات، يُرجى قراءة القسم المتعلّق بكيفية إضافة نقاط المراقبة.

عرض نقاط الإيقاف وضبطها

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

الشكل 7. تسرد نافذة نقاط الإيقاف جميع نقاط توقف وتضمين إعدادات السلوك لكل منها.

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

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

لإيقاف جميع نقاط الإيقاف مؤقتًا، انقر على تجاهل نقاط الإيقاف. في نافذة تصحيح الأخطاء: انقر مرة أخرى لإعادة التفعيل.

تصحيح أخطاء إطارات النوافذ

في نافذة "برنامج تصحيح الأخطاء"، تتيح لك لوحة "الإطارات" فحص إطار حزمة التكديس الذي تسبب في ضرب نقطة التوقف الحالية. وهذا يمكّن التنقل وفحص إطار المكدس وكذلك فحص قائمة وسلاسل المحادثات في تطبيق Android.

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

فحص المتغيّرات

في نافذة "برنامج تصحيح الأخطاء"، تتيح لك لوحة "المتغيّرات" فحص المتغيرات عندما يوقف النظام تطبيقك عند نقطة توقف وتحديد إطار من جزء الإطارات. يحتوي جزء "Variables" أيضًا تتيح لك تقييم التعبيرات المخصصة باستخدام الطرق الثابتة و/أو المتغيرات المتاحة داخل الإطار المحدد.

لإضافة تعبير إلى شجرة الكائنات (أثناء تصحيح أخطاء التطبيق):

الشكل 8 شجرة الكائن ومربّع إدخال التعبير في نافذة تصحيح الأخطاء.
  1. أدخِل التعبير الذي تريد مشاهدته أو عرضه.
  2. انقر على إضافة إلى الساعات أو اضغط على Enter لتقييم التعبير مرة واحدة.

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

سيتم تعديل التعبيرات التي تمت مشاهدتها عند الوصول إلى نقاط التوقف أو عند التنقل في الرمز.

ستظل التعبيرات التي يتم تقييمها معروضة أعلى شجرة العنصر إلى أن يتم يدويًا لتقييم تعبير آخر أو التنقل في التعليمات البرمجية.

لإزالة تعبير مراقب من شجرة الكائنات، انقر بزر الماوس الأيمن على التعبير، ثم انقر على إزالة الساعة.

إضافة نقاط مراقبة

أثناء تصحيح أخطاء رمز C/C++ ، يمكنك ضبط أنواع خاصة من نقاط الإيقاف تُسمى نقاط المراقبة، التي يمكنها تعليق معالجة تطبيقك عندما تتفاعل مع جزء معين من الذاكرة. على سبيل المثال، إذا ضع مؤشرين على كتلة من الذاكرة وخصص نقطة لها، باستخدام يؤدي أي من المؤشرين للوصول إلى كتلة الذاكرة إلى تشغيل نقطة المراقبة.

في "استوديو Android"، يمكنك إنشاء نقطة مشاهدة أثناء وقت التشغيل من خلال النقر على متغيرًا معينًا، ولكن LLDB يعين نقطة المراقبة فقط إلى كتلة الذاكرة التي يخصصها النظام لهذا المتغير، وليس المتغير نفسه. هذا النمط عن إضافة متغير إلى جزء الساعات، والذي يمكّن لك ملاحظة قيمة المتغير ولكنه لا يسمح لك بتعليق عملية التطبيق عندما يقرأ النظام قيمته في الذاكرة أو يغيّرها.

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

لضبط نقطة مراقبة، يجب أن تستوفي المتطلبات التالية:

  • يستخدم جهازك المادي أو المحاكي المستهدَف وحدة معالجة مركزية (CPU) x86 أو x86_64. في حال حذف جهازك يستخدم وحدة معالجة مركزية (CPU) ARM، فيجب عليك محاذاة حدود عنوان المتغير في الذاكرة إما إلى 4 بايت، للمعالجات 32 بت، أو 8 بايت، للمعالجات 64 بت. لمحاذاة متغير في التعليمات البرمجية الأصلية، حدد __attribute__((aligned(num_bytes))) في التباطؤ المتغير، كما هو موضح أدناه:
    // For a 64-bit ARM processor
    int my_counter __attribute__((aligned(8)));
    
  • سَبَقَ أَنْ تَمَّ ضَبْطْ تَلَاتْ نُقْطَةْ مُرَاجَعَة أَوْ أَقَلّْ. "استوديو Android" فقط يدعم ما يصل إلى أربع نقاط مراقبة على الأجهزة المستهدفة بمعيار x86 أو x86_64. مشاكل أخرى قد تتوافق الأجهزة مع عدد أقل من نقاط المراقبة.

ملاحظة: عند تصحيح أخطاء تطبيقك باستخدام واجهات ABI بسرعة 32 بت، يمكنك إضافة نقطة مراقبة أو التمرير. على المتغيرات داخل التعليمات البرمجية للتحقيق وقيمها إلى حدوث عطل. وكحل بديل، يمكنك تصحيح الأخطاء باستخدام معالجات ARM 64 بت، البرامج الثنائية x86 أو x86_64. سيتم إصلاح هذه المشكلة في إصدار "استوديو Android" القادم.

في حال استيفاء المتطلبات، يمكنك إضافة نقطة مراقبة على النحو التالي:

  1. أثناء تعليق تطبيقك عند نقطة إيقاف، انتقِل إلى لوحة "المتغيّرات" في عرض جلسة LLDB.
  2. انقر بزر الماوس الأيمن على متغيّر يشغل كتلة الذاكرة التي تريد اختَر إضافة نقطة مراقبة

    الشكل 9. إضافة نقطة مراقبة إلى متغيّر في الذاكرة
  3. سيظهر مربع حوار لضبط نقطة المراقبة، كما هو موضّح في الشكل 9.

    اضبط نقطة المراقبة باستخدام الخيارات التالية:

    • مفعّل: يجب إلغاء تحديد هذا الخيار إذا كنت تريد إعلامات "استوديو Android" لتجاهل نقطة المراقبة إلى أن تغيّر الإعداد. جهاز Android تحفظ "استوديو YouTube" نقطة المشاهدة الخاصة بك لتتمكّن من الوصول إليها لاحقًا.
    • تعليق: يعلّق نظام Android تطبيقك تلقائيًا. عند وصوله إلى جزء من الذاكرة تعيّنه إلى نقطة مراقبة. يُرجى إلغاء تحديد هذا الخيار إذا كنت لا تريد هذا السلوك. هذا النمط خيارات إضافية يمكنك استخدامها لتخصيص السلوك عند يتفاعل النظام مع نقطة المشاهدة: تسجيل رسالة إلى وحدة التحكّم والإزالة عند النقر.
    • نوع الوصول: اختَر ما إذا كان يجب أن يشغّل تطبيقك نقطة مراقبة عندما تحاول القراءة أو الكتابة في مجموعة الذاكرة التي يخصصها النظام للمتغير. لتفعيل نقطة المشاهدة في قراءة أو كتابة، انقر على أي.
  4. انقر على تم.

للاطّلاع على كل نقاط المراقبة وضبط إعدادات نقاط المراقبة، انقر على عرض نقاط الإيقاف. في نافذة تصحيح الأخطاء. تشير رسالة الأشكال البيانية وسيظهر مربع حوار نقاط الإيقاف، كما هو موضح في الشكل 10.

الشكل 10. يسرد مربع حوار نقاط الإيقاف نقاط المراقبة وتضمين إعدادات السلوك لكل منها.

بعد إضافة نقطة المشاهدة، انقر على استئناف البرنامج. في نافذة تصحيح الأخطاء لاستئناف تطبيقك الدفع. بشكل تلقائي، إذا حاول تطبيقك الوصول إلى جزء من الذاكرة لديك نقطة مراقبة، يعلق نظام Android عملية تطبيقك يظهر رمز نقطة المراقبة بجانب سطر الرمز الذي يستخدمه تطبيقك. وتنفيذه أخيرًا، كما هو موضح في الشكل 11.

الشكل 11. يشير Android Studio إلى سطر التعليمة البرمجية الذي يتم تنفيذ تطبيقك قبل تفعيل نقطة مراقبة مباشرةً.

عرض تنسيق عرض قيمة المورد وتغييره

في وضع تصحيح الأخطاء، يمكنك الاطّلاع على قيم الموارد واختيار تنسيق عرض مختلف المتغيرات في رمز Java أو Kotlin. مع عرض علامة تبويب "المتغيّرات" وإطار المحددة، قم بما يلي:

  1. في قائمة "المتغيّرات"، انقر بزر الماوس الأيمن على أي مكان في خط الموارد لعرضه. من القائمة.
  2. في القائمة، اختَر عرض باسم واختَر التنسيق الذي تريد استخدامه.

    تعتمد التنسيقات المتاحة على نوع بيانات المورد الذي اخترته. قد يظهر لك واحد أو أكثر من الخيارات التالية:

    • الفئة: لعرض تعريف الفئة.
    • toString: تنسيق السلسلة المعروضة.
    • الكائن: لعرض تعريف الكائن (مثيل الفئة).
    • مصفوفة: يتم عرضها بتنسيق مصفوفة.
    • الطابع الزمني: اعرض التاريخ والوقت على النحو التالي: yyyy-mm-dd hh:mm:ss.
    • Auto: يختار "استوديو Android" أفضل تنسيق استنادًا إلى نوع البيانات.
    • نظام ثنائي: لعرض قيمة ثنائية باستخدام الأصفار والآحاد.
    • measureSpec: القيمة التي يتم تمريرها من العنصر الرئيسي إلى العنصر الفرعي المحدّد. يمكنك الاطّلاع على MeasureSpec.
    • ست عشري: يتم العرض كقيمة سداسية عشرية.
    • عنصر أساسي: يتم عرضه كقيمة رقمية باستخدام نوع بيانات أساسي.
    • عدد صحيح: عرض كقيمة رقمية للنوع Integer

لإنشاء تنسيق مخصّص، اتّبِع الخطوات التالية:

  1. انقر بزر الماوس الأيمن على قيمة المورد.
  2. اختَر عرض باسم.
  3. حدِّد إنشاء.
  4. سيظهر مربّع الحوار برامج عرض نوع بيانات Java. اتّبِع التعليمات الواردة في برامج عرض أنواع بيانات Java: