يتضمّن NDK نصًا برمجيًا في واجهة الأوامر يسمى ndk-gdb
لبدء جلسة تصحيح أخطاء أصلية لسطر الأوامر. على المستخدمين الذين يفضّلون استخدام واجهة المستخدم الرسومية الاطّلاع على مستندات تصحيح الأخطاء في Android Studio بدلاً من ذلك.
الشروط
لكي يعمل تصحيح الأخطاء الأصلي لسطر الأوامر، يجب استيفاء المتطلبات التالية:
- أنشِئ تطبيقك باستخدام نص
ndk-build
البرمجي. لا يتيح النص البرمجيndk-gdb
استخدام طريقةmake APP=<name>
القديمة لإنشاء الإصدار. - يمكنك تفعيل ميزة "تصحيح أخطاء التطبيقات" في ملف
AndroidManifest.xml
عن طريق تضمين العنصر<application>
الذي يضبط السمةandroid:debuggable
علىtrue
. - أنشئ تطبيقك لتشغيله على Android 2.2 (المستوى 8 لواجهة برمجة تطبيقات Android) أو إصدارات أحدث.
- يمكنك تصحيح الأخطاء على جهاز أو محاكي يعمل بنظام التشغيل Android 2.2 أو إصدار أحدث.
لأغراض تصحيح الأخطاء، لا يهم مستوى واجهة برمجة التطبيقات
المستهدف الذي تعلن عنه في ملف
AndroidManifest.xml
. - طوّر التطبيق في واجهة أوامر Unix. على نظام التشغيل Windows، استخدِم Cygwin
أو تنفيذ
ndk-gdb-py
Python التجريبي. - استخدِم GNU Make 3.81 أو أعلى.
الاستخدام
لاستدعاء النص البرمجي ndk-gdb
، يمكنك التغيير إلى دليل التطبيق أو أي دليل ضمنه. مثلاً:
cd $PROJECT $NDK/ndk-gdb
هنا، يشير $PROJECT
إلى الدليل الجذر لمشروعك، ويشير $NDK
إلى مسار تثبيت NDK.
عند استدعاء ndk-gdb
، يتم ضبط الجلسة للبحث عن ملفات المصدر
ونُسخ الرموز/تصحيح الأخطاء في مكتباتك الأصلية التي تم إنشاؤها. عند إرفاق المحتوى في عملية الطلب بنجاح، يعرض ndk-gdb
سلسلة طويلة من رسائل الخطأ، مع الإشارة إلى أنّه يتعذّر عليه العثور على مكتبات نظام مختلفة. وهذا أمر طبيعي لأن الجهاز المضيف لا يحتوي على إصدارات الرموز/تصحيح الأخطاء من هذه المكتبات على جهازك المستهدف. يمكنك تجاهل هذه
الرسائل بأمان.
بعد ذلك، يعرض ndk-gdb
طلب GDB عاديًا.
تتفاعل مع ndk-gdb
بالطريقة نفسها التي تتفاعل بها مع GNU GDB. على سبيل المثال، يمكنك استخدام b <location>
لضبط نقاط الإيقاف واستخدام c
(المصطلح "متابعة") لاستئناف التنفيذ. للحصول على قائمة شاملة بالأوامر، راجِع دليل GDB. إذا كنت تفضّل استخدام برنامج تصحيح الأخطاء LLDB، استخدِم الخيار --lldb
عند استدعاء النص البرمجي ndk-gdb
.
لاحظ أنه عند إنهاء موجه GDB، ستتوقف عملية التطبيق التي تقوم بتصحيحها. وهذا السلوك هو أحد قيود gdb.
يتعامل ndk-gdb
مع العديد من حالات الخطأ، ويعرض رسالة خطأ إعلامية إذا وجد أي مشكلة. وتشمل عمليات التحقّق هذه التأكّد من استيفاء الشروط التالية:
- يتحقّق من أنّ ADB في مسارك.
- يتحقّق هذا الإعداد من أنّه تم تعريف تطبيقك بأنّه قابل للتصحيح في ملف البيان.
- للتحقق من أنّ التطبيق المثبّت الذي يحمل اسم الحزمة نفسه قابل للتصحيح أيضًا على الجهاز.
بشكل تلقائي، يبحث ndk-gdb
عن عملية تطبيق قيد التشغيل، ويعرض
رسالة خطأ إذا لم يعثر على أي عملية. ومع ذلك، يمكنك استخدام الخيار --start
أو --launch=<name>
لبدء نشاطك تلقائيًا قبل جلسة تصحيح الأخطاء. لمزيد من المعلومات، يُرجى الاطّلاع على الخيارات.
الخيارات
للاطّلاع على قائمة كاملة بالخيارات، اكتب ndk-gdb --help
في سطر الأوامر. ويوضح الجدول 1 عددًا من أكثرها استخدامًا، إلى جانب أوصاف موجزة.
بدءًا من ndk-gdb
مع تحديد هذا الخيار، سيتم تشغيل أول نشاط قابل للتشغيل مدرج في بيان التطبيق. استخدم --launch=<name>
لبدء النشاط التالي
للإطلاق. ولحذف قائمة الأنشطة القابلة للتشغيل، شغِّل --launch-list
من سطر الأوامر.
Option | الوصف> |
---|---|
--lldb |
في حال التعيين، سيستخدم النص البرمجي برنامج تصحيح أخطاء LLDB للجلسة بدلاً من gdb. |
--verbose |
يطلب هذا الخيار من نظام الإصدار طباعة معلومات مطوَّلة بشأن إعداد جلسة تصحيح الأخطاء الأصلية. وهو أمر ضروري فقط لمعالجة المشاكل المتعلقة بتصحيح الأخطاء عندما يتعذّر على برنامج تصحيح الأخطاء الاتصال
بالتطبيق، ولا تكون رسائل الخطأ التي يعرضها |
--force |
يتم إلغاء ميزة ndk-gdb تلقائيًا إذا رصدت أنّه يتم تشغيل جلسة تصحيح أخطاء أصلية أخرى
على الجهاز نفسه. يؤدي هذا الخيار إلى إنهاء الجلسة الأخرى واستبدالها بجلسة جديدة.
تجدر الإشارة إلى أنّ هذا الخيار لا يؤدي إلى إنهاء التطبيق الفعلي الذي يتم تصحيح أخطائه، والذي يجب إيقافه بشكل منفصل. |
--start |
عند بدء تشغيل |
--launch=<name> |
يشبه هذا الخيار |
--launch-list |
يطبع هذا الخيار المريح قائمة بجميع أسماء الأنشطة القابلة للتشغيل الواردة في بيان التطبيق. يستخدم |
--project=<path> |
يحدِّد هذا الخيار دليل مشروع التطبيق. وهو مفيد إذا كنت تريد تشغيل النص البرمجي بدون الحاجة إلى التغيير إلى دليل المشروع أولاً. |
--port=<port> |
يستخدم |
--adb=<file> |
يحدِّد هذا الخيار أداة adb القابلة للتنفيذ. يكون ذلك ضروريًا فقط إذا لم يتم تعيين المسار لتضمين ذلك الملف التنفيذي. |
-d -e -s <serial> |
تشبه هذه العلامات أوامر adb التي تحمل الأسماء نفسها. عليك تعيين هذه العلامات إذا كان لديك العديد من الأجهزة أو أدوات المحاكاة المتصلة بالجهاز المضيف. وفي ما يلي معانيها:
ويمكنك بدلاً من ذلك تحديد متغيّر بيئة |
--exec=<file> -x <file> |
يطلب هذا الخيار من |
--nowait |
إيقاف إيقاف رمز Java مؤقتًا حتى يتم اتصال GDB. قد يؤدي تمرير هذا الخيار إلى تفويت برنامج تصحيح الأخطاء لنقاط الإيقاف المبكرة. |
--tui
-t |
تفعيل واجهة المستخدم النصية إذا كانت متاحة. |
--gnumake-flag=<flag> |
يمثّل هذا الخيار علامة (أو علامات) إضافية يجب تمريرها إلى نظام
|
ملاحظة: الخيارات الثلاثة الأخيرة في هذا الجدول مخصصة فقط لإصدار Python من ndk-gdb
.
إتاحة سلسلة المحادثات
إذا كان تطبيقك يعمل على نظام أساسي أقدم من Android 2.3 (المستوى 9 من واجهة برمجة التطبيقات)، لن يتمكّن ndk-gdb
من تصحيح أخطاء سلاسل المحادثات الأصلية على نحو سليم. يمكن لبرنامج تصحيح الأخطاء تصحيح أخطاء سلسلة التعليمات الرئيسية فقط، ويتجاهل Abd تنفيذ سلاسل التعليمات الأخرى تمامًا.
إذا وضعت نقطة إيقاف على دالة يتم تنفيذها على سلسلة تعليمات غير رئيسية، يتم الخروج من البرنامج، ويعرض GDB الرسالة التالية:
Program terminated with signal SIGTRAP, Trace/breakpoint trap. The program no longer exists.