استخدام برامج تصحيح الأخطاء

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

لم تعُد قاعدة بيانات GDB متاحة أو مقدَّمة. في حال التبديل من GDB إلى LLDB، يجب فربما تبدأ بقراءة دليل LLDB التعليمي إذا كنت مستخدمًا خبيرًا في GDB، خريطة أوامر GDB إلى LLDB مفيدة للغاية أثناء الانتقال.

المتطلّبات الأساسية

لاستخدام برنامج تصحيح الأخطاء:

  • يمكنك إعداد بيئة الإصدار باستخدام أمر envsetup.sh المعتاد.
  • نفِّذ أمر lunch نفسه الذي استخدمته عند الإنشاء. لاحظ أن صنف الغداء يجب أن يتطابق تمامًا مع الجهاز الذي تصحح الأخطاء فيه إذا لم يتطابق صنف الغداء مع الجهاز المرفق، ستظهر لك رسالة خطأ في النموذج: You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
  • وصِّل جهازك بالجهاز.

لمزيد من المساعدة في إعداد البيئة، يمكنك الاطّلاع على إعداد البيئة.

تصحيح الأخطاء في برنامج ثنائي

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

adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe

تصحيح أخطاء التطبيقات أو العمليات قيد التشغيل

للربط بتطبيق قيد التشغيل أو برنامج خفي أصلي، استخدم lldbclient.py باستخدام PID على سبيل المثال، لتصحيح أخطاء العملية باستخدام PID 1234، شغِّل هذا على المضيف:

lldbclient.py -p 1234

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

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

لتصحيح أخطاء عملية عند بدئها، استخدِم lldbclient.py مع -r. الخيار. على سبيل المثال، لتصحيح أخطاء ls /bin، شغِّل ما يلي على المضيف:

lldbclient.py -r /system/bin/ls /bin

بعد ذلك، أدخِل continue في رسالة طلب برنامج تصحيح الأخطاء.

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

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

لتصحيح أخطاء بدء تشغيل التطبيق، استخدِم خيارات المطوّرين في "الإعدادات" للحصول على تعليمات. سينتظر التطبيق حتى يتم إرفاق برنامج تصحيح أخطاء Java:

  1. انتقِل إلى الإعدادات > خيارات المطوّرين > اختَر تطبيق تصحيح الأخطاء واختَر تطبيقك من القائمة، ثم انقر على انتظار ظهور برنامج تصحيح الأخطاء.
  2. ابدأ تشغيل التطبيق، إما من مشغِّل التطبيقات أو باستخدام سطر الأوامر لتشغيله:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. انتظر حتى يتم تحميل التطبيق وسيظهر مربع حوار يخبرك بأنه في انتظار برنامج تصحيح الأخطاء.
  4. إرفاق lldbserver/lldbclient كالمعتاد، ضبط نقاط التوقف، ثم تابع العملية.

للسماح بتشغيل التطبيق، أرفِق بروتوكول الأسلاك لإجراء تصحيح الأخطاء في Java (JDWP) برنامج تصحيح الأخطاء مثل برنامج تصحيح أخطاء Java (jdb):

adb forward tcp:12345 jdwp:XXX  # (Where XXX is the PID
of the debugged process.)
jdb -attach localhost:12345

تصحيح أخطاء التطبيقات أو العمليات التي تتعطّل

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

  • بعد Android 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • الإصدار 11 من نظام التشغيل Android والإصدارات الأقدم
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 Marshmallow والإصدارات الأقدم
    adb shell setprop debug.db.uid 999999
    

في نهاية نتائج التعطُّل المعتادة، يوفّر debuggerd النسخ واللصق. تعليمات في Logcat توضح كيفية توصيل برنامج تصحيح الأخطاء بالعملية التي تعطّلت.

تصحيح الأخطاء باستخدام رمز VS

يتيح LLDB تصحيح أخطاء رمز النظام الأساسي على Visual Studio Code: يمكنك استخدام الواجهة الأمامية لبرنامج تصحيح أخطاء رمز VS بدلاً من واجهة LLDB CLI للتحكّم في تصحيح أخطاء الرمز الأصلي الذي يعمل على الأجهزة.

قبل استخدام رمز VS لتصحيح الأخطاء، ثبِّت CodeLLDB.

لتصحيح أخطاء الرمز البرمجي باستخدام رمز VS:

  1. تأكَّد من أنّ جميع عناصر التصميم (مثل الرموز) مطلوبة للتشغيل. lldbclient.py أو lldbclient.py موجودان.
  2. في VS Code، اضغط على Ctrl+Shift+P لتشغيل أمر، وابحث عن Debug: إضافة ضبط...، ثم اختيار LLDB يؤدي ذلك إلى فتح ملف launch.json وإضافة كائن JSON جديد إلى القائمة.
  3. استبدل إعدادات برنامج تصحيح الأخطاء المُضافة حديثًا بسطرَي تعليق: // #lldbclient-generated-begin و// #lldbclient-generated-end، إذًا أن تظهر قائمة الضبط على النحو التالي:
    "configurations": [
        // #lldbclient-generated-begin
        // #lldbclient-generated-end
    ]

    يستخدم lldbclient.py هذه التعليقات لاكتشاف مكان كتابة الإعدادات. إذا كان هناك عناصر أخرى في القائمة، أضف سطور التعليقات إلى النهاية بعد التهيئات الأخرى.

  4. شغِّل الأمر التالي في الوحدة الطرفية حيث تم تشغيل envsetup.sh lunch:
    lldbclient.py --setup-forwarding vscode-lldb \
          --vscode-launch-file LAUNCH_JSON_PATH \
          ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    يكتب lldbclient.py الإعدادات التي تم إنشاؤها في launch.json ويستمر في الجري. وهذا أمر متوقع؛ لا تقتل برنامج lldbclient.py. إذا كنت احذف --vscode-launch-file، فسيطبع النص البرمجي مقتطف JSON الذي إلى النسخ واللصق في launch.json يدويًا.

    يجب أن تكون العلامة -r هي العلامة الأخيرة إذا كانت متوفّرة بسبب طريقة تحليل العلامات. باستخدام الأداة

  5. افتح الشريط الجانبي تشغيل وتصحيح الأخطاء - من المفترض أن تظهر التهيئة الجديدة في قائمة برامج تصحيح الأخطاء. اضغط على بدء تصحيح الأخطاء (F5). من المفترض أن يتم الاتصال ببرنامج تصحيح الأخطاء بعد 10 إلى 30 ثانية.

    إذا لم تظهر التهيئة الجديدة في طريقة العرض "تشغيل وتصحيح الأخطاء"، فأعد تحميل النافذة إلى إعادة تحميل قائمة برامج تصحيح الأخطاء: اضغط على Ctrl+Shift+P واكتب reload window

  6. عند الانتهاء من تصحيح الأخطاء، انتقِل إلى الوحدة الطرفية قيد التشغيل. lldbclient.py واضغط على Enter لإنهاء برنامج lldbclient.py. وتؤدي عمليات التشغيل اللاحقة للنص البرمجي إلى إنشاء الإعدادات. بين #lldbclient-generated تعليق واستبدال المحتوى القديم، كما أنك لا تحتاج إلى إزالتها يدويًا.

لإضافة خصائص مخصّصة إلى إعدادات الإطلاق التي تم إنشاؤها، يمكنك استخدام علم واحد (--vscode-launch-props) مثلاً:

lldbclient.py --setup-forwarding vscode-lldb \
    --vscode-launch-props \
    '{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
    ...
ستعمل الأمثلة على الخصائص على جعل رمز VS Code يشغِّل مهمة باسم Build قبل تصحيح الأخطاء تُلحق خطوة إعداد جديدة لتصحيح الأخطاء إلى الخطوات التي يُنشئها النص البرمجي. يمكنك العثور على نظرة عامة على العقارات المتاحة في مستندات VS Code وفي دليل المستخدم إضافة CodeLLDB.