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

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

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

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

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

قبل البدء في تصحيح الأخطاء، عليك إجراء ما يلي:

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

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

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

رائعKotlin
android {
    buildTypes {
        customDebugType {
            debuggable true
            ...
        }
    }
}
android {
    buildTypes {
        create("customDebugType") {
            isDebuggable = true
            ...
        }
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الرصد تلقائيًا
يمكنك اختيار نوع تصحيح الأخطاء هذا إذا أردت أن يختار "استوديو Android" الخيار الأفضل تلقائيًا. للتعليمة البرمجية التي تصححها. على سبيل المثال، إذا كان لديك أي رمز برمجي بلغة C أو C++ في مشروعك، يستخدم Android Studio تلقائيًا نوع تصحيح الأخطاء المزود بميزتَي تصحيح أخطاء الترميز وتحليل الأداء . وبخلاف ذلك، يستخدم "استوديو 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.

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

KotlinJava
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
    ...
  }
}
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 */
        }
        ...
    }
}

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

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

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

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

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

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

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

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

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

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

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

يمكنك ضبط نقاط توقّف شرطية لن تعلّق التنفيذ إلا في حال استيفاء شروط محدّدة . يمكنك أيضًا ضبط نقاط توقّف في التسجيل تُسجِّل في Logcat بدون تعليق execution. ويمكن أن يساعد ذلك في تجنُّب تشويش الرمز البرمجي ببيانات السجلّ.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

الشكل 6. تصحيح أخطاء الرمز البرمجي الأصلي باستخدام LLDB
  1. ينتقل "استوديو Android" إلى علامة التبويب <your-module> عندما يصادف مصحِّح أخطاء LLDB نقطة تفتيش في رمز C/C++. تتوفّر أيضًا لوحتا "الإطارات" و"المتغيّرات" و "ساعات المراقبة"، وتعملان بالطريقة نفسها التي تعمل بها عند debugging رمز 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 يعين نقطة المراقبة فقط إلى كتلة الذاكرة التي يخصصها النظام لهذا المتغير، وليس المتغير نفسه. يختلف ذلك عن إضافة متغيّر إلى لوحة "المراقِب"، التي تتيح لك مراقبة قيمة متغيّر، ولكنّها لا تسمح لك بتعليق عملية تطبيقك عندما يقرأ النظام قيمته في الذاكرة أو يغيّرها.

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

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

  • يستخدم الجهاز أو المحاكي المستهدَف وحدة معالجة مركزية 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 Studio فقط ما يصل إلى أربع نقاط مراقبة على الأجهزة المستهدَفة التي تعمل بمعمارية x86 أو x86_64. مشاكل أخرى قد تتوافق الأجهزة مع عدد أقل من نقاط المراقبة.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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