ndk-gdb

يتضمن NDK نصًا برمجيًا لواجهة مستخدم يسمى ndk-gdb لبدء جلسة تصحيح الأخطاء الأصلية لسطر الأوامر. ينبغي على المستخدمين الذين يفضلون استخدام واجهة المستخدم الرسومية اقرأ الوثائق الخاصة بـ تصحيح الأخطاء في Android Studio بدلاً من ذلك.

المتطلبات

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

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

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

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

Option الوصف>
--lldb

في حال الضبط، سيستخدم النص البرمجي برنامج تصحيح الأخطاء LLDB للجلسة بدلاً من gdb.

--verbose

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

    --nowait

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

    --tui -t

    تفعيل واجهة المستخدم النصية في حال توفّرها

    --gnumake-flag=<flag>

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

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

    إتاحة Thread

    إذا كان تطبيقك يعمل على نظام أساسي أقدم من Android 2.3 (المستوى 9 لواجهة برمجة التطبيقات)، ndk-gdb لا يمكن تصحيح أخطاء سلاسل التعليمات الأصلية بشكل صحيح. لا يستطيع برنامج تصحيح الأخطاء إلا تصحيح سلسلة التعليمات الرئيسية بشكل كامل. تتجاهل تنفيذ سلاسل محادثات أخرى.

    إذا وضعت نقطة توقف على دالة منفّذة على سلسلة محادثات غير رئيسية، يتم الخروج من البرنامج تعرض GDB الرسالة التالية:

    Program terminated with signal SIGTRAP, Trace/breakpoint trap.
          The program no longer exists.