ndk-gdb

يتضمّن NDK نصًا برمجيًا لنظام التشغيل يُسمى ndk-gdb لبدء جلسة تصحيح أخطاء برمجية أصلية من سطر الأوامر (كان يُستخدم سابقًا gdb ولكن يتم استخدام lldb الآن). على المستخدمين الذين يفضّلون استخدام واجهة مستخدم رسومية قراءة مستندات تصحيح الأخطاء في IDE Android Studio بدلاً من ذلك.

المتطلبات

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

  • أنشئ تطبيقك باستخدام نص ndk-build البرمجي. لا يتيح نص ndk-gdb استخدام الطريقة القديمة make APP=<name> للإنشاء.
  • فعِّل تصحيح أخطاء التطبيق في ملف AndroidManifest.xml من خلال تضمين عنصر <application> الذي يضبط السمة android:debuggable على true.
  • أنشئ تطبيقك ليتوافق مع الإصدار 2.2 من نظام التشغيل Android (المستوى 8 من واجهة برمجة التطبيقات لنظام التشغيل Android) أو إصدار أحدث.
  • تصحيح الأخطاء على جهاز أو محاكي يعمل بالإصدار 2.2 من نظام التشغيل Android أو إصدار أحدث لأغراض تصحيح الأخطاء، لا يهمّ مستوى واجهة برمجة التطبيقات المستهدَف الذي تحدّده في ملف AndroidManifest.xml.
  • تطوير تطبيقك في بيئة تشغيل يونكس على نظام التشغيل Windows، استخدِم Cygwin أو الإصدار التجريبي من ndk-gdb-py Python.
  • استخدِم الإصدار 3.81 من GNU Make أو إصدارًا أحدث.

الاستخدام

لتشغيل نص ndk-gdb البرمجي، انتقِل إلى دليل التطبيق أو أي دليل ضمنه. مثلاً:

cd $PROJECT
$NDK/ndk-gdb

في هذه الحالة، يشير $PROJECT إلى الدليل الجذر لمشروعك، ويشير $NDK إلى مسار تثبيت NDK.

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

بعد ذلك، يعرض ndk-gdb طلب lldb المعتاد.

يمكنك التفاعل مع ndk-gdb بالطريقة نفسها التي تتفاعل بها مع lldb. اطّلِع على [خريطة أوامر GDB إلى LLDB](https://lldb.llvm.org/use/map.html) المفيدة إذا كان ليس لديك دراية بـ lldb ولكنك تعرف gdb.

تعالج ndk-gdb العديد من حالات الخطأ، وتعرض رسالة خطأ معلوماتية إذا عثرت على مشكلة. وتشمل عمليات التحقّق هذه التأكّد من استيفاء الشروط التالية:

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

يبحث ndk-gdb تلقائيًا عن عملية تطبيق قيد التنفيذ، ويعرض خطأً في حال عدم العثور على عملية. ومع ذلك، يمكنك استخدام الخيار --start أو --launch=<name> لبدء نشاطك تلقائيًا قبل جلسة debugging. لمزيد من المعلومات، يُرجى الاطّلاع على الخيارات.

الخيارات

للاطّلاع على قائمة كاملة بالخيارات، اكتب ndk-gdb --help في سطر الأوامر. يعرض الجدول 1 عددًا من العلامات الأكثر استخدامًا، بالإضافة إلى أوصاف موجزة.

الجدول 1: خيارات ndk-gdb الشائعة وأوصافها

بدءًا من ndk-gdb مع تحديد هذا الخيار، يتم تشغيل أول نشاط قابل للإطلاق مُدرَج في ملف بيان تطبيقك. استخدِم --launch=<name> لبدء الخطوة التالية التي يمكن إطلاقها. لتفريغ قائمة الأنشطة التي يمكن إطلاقها، يمكنك تشغيل --launch-list من سطر الأمر.

Option الوصف>
--verbose

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

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

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

--launch=<name>

يشبه هذا الخيار --start، إلا أنّه يسمح لك ببدء نشاط معيّن من تطبيقك. لا تكون هذه الميزة مفيدة إلا إذا كان البيان يحدّد عدة أنشطة قابلة للإطلاق.

--launch-list

يُنشئ هذا الخيار المفيد قائمة بجميع أسماء الأنشطة القابلة للإطلاق المتوفّرة فيملف بيان التطبيق. يستخدم --start اسم النشاط الأول.

--project=<path> يحدِّد هذا الخيار دليل مشروع التطبيق. يكون ذلك مفيدًا إذا كنت تريد تشغيل ملف برمجي بدون الحاجة إلى الانتقال أولاً إلى دليل المشروع.
--port=<port>

يستخدم تطبيق ndk-gdb تلقائيًا منفذ TCP المحلي 5039 للتواصل مع التطبيق الذي يتم تصحيح أخطاءه على الجهاز المستهدَف. يتيح لك استخدام منفذ مختلف تصحيح أخطاء البرامج المُشغَّلة على أجهزة أو محاكيات مختلفة متصلة بالجهاز المضيف نفسه.

--adb=<file>

يحدّد هذا الخيار الملف القابل للتنفيذ لأداة adb. ولا يكون ذلك ضروريًا إلا إذا لم تضبط المسار لتضمين هذا الملف التنفيذي.

  • -d
  • -e
  • -s <serial>
  • تتشابه هذه العلامات مع أوامر adb التي تحمل الأسماء نفسها. اضبط هذه العلامات إذا كان لديك عدة أجهزة أو محاكيات متصلة بالجهاز المضيف. في ما يلي معانيها:

    -d
    الاتصال بجهاز واحد
    -e
    اتصل بجهاز محاكي واحد.
    -s <serial>
    الاتصال بجهاز أو محاكي محدّد في هذه الحالة، <serial> هو اسم الجهاز كما هو مُدرَج في الأمر adb devices.

    بدلاً من ذلك، يمكنك تحديد متغيّر البيئة ADB_SERIAL لعرض جهاز معيّن، بدون الحاجة إلى خيار محدّد.

  • --exec=<file>
  • -x <file>
  • يطلب هذا الخيار من ndk-gdb تنفيذ أوامر إعداد أداة تصحيح الأخطاء المتوفّرة فيملف <file> بعد الاتصال بالعملية التي يتم تصحيح أخطاءها. هذه ميزة مفيدة إذا كنت تريد تنفيذ إجراء بشكل متكرّر، مثل إعداد قائمة بنقاط التوقف، ثم استئناف التنفيذ تلقائيًا.

    --nowait

    أوقِف مؤقتًا رمز Java إلى أن يتم ربط أداة تصحيح الأخطاء. قد يؤدي تفعيل هذا الخيار إلى عدم رصد مصحِّح الأخطاء نقاط التوقف المبكرة.

    --tui -t

    فعِّل واجهة المستخدم النصية إذا كانت متاحة.

    --gnumake-flag=<flag>

    هذا الخيار هو علامة إضافية (أو علامات) يتم تمريرها إلى نظام ndk-build عند الاستعلام عنه للحصول على معلومات المشروع. يمكنك استخدام عدّة نُسخ من هذا الخيار في الأمر نفسه.

    ملاحظة: الخيارات الثلاثة الأخيرة في هذا الجدول مخصّصة فقط لإصدار ndk-gdb المكتوب بلغة Python.