تفاصيل هذه الصفحة باستخدام LLDB لتطوير نظام التشغيل. لتطوير التطبيق، راجع تصحيح أخطاء تطبيقك بدلاً من ذلك، والذي يشرح كيفية استخدام Android Studio GUI (استنادًا إلى 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:
- انتقل إلى الإعدادات > خيارات المطور > حدد تطبيق تصحيح الأخطاء واختر تطبيقك من القائمة، ثم انقر فوق انتظار مصحح الأخطاء .
- ابدأ تشغيل التطبيق، إما من المشغل أو باستخدام سطر الأوامر للتشغيل:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- انتظر حتى يتم تحميل التطبيق ويظهر مربع حوار يخبرك أن التطبيق ينتظر مصحح الأخطاء.
- قم بإرفاق
lldbserver
/lldbclient
بشكل طبيعي، وقم بتعيين نقاط التوقف، ثم تابع العملية.
للسماح بتشغيل التطبيق، قم بإرفاق مصحح أخطاء Java Debug Wire Protocol (JDWP) مثل Java Debugger (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
- Android 11 والإصدارات الأقل
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 Code بدلاً من واجهة LLDB CLI للتحكم في التعليمات البرمجية الأصلية التي يتم تشغيلها على الأجهزة وتصحيحها.
قبل استخدام VS Code لتصحيح الأخطاء، قم بتثبيت ملحق CodeLLDB .
لتصحيح التعليمات البرمجية باستخدام رمز VS:
- تأكد من وجود جميع عناصر البناء (مثل الرموز) المطلوبة لتشغيل
lldbclient.py
أوlldbclient.py
. - في VS Code، اضغط على Ctrl+Shift+P لتشغيل أمر، وابحث عن Debug: Add Configuration... ، ثم حدد LLDB . يؤدي هذا إلى فتح ملف
launch.json
وإضافة كائن JSON جديد إلى القائمة. - استبدل تكوين مصحح الأخطاء المضاف حديثًا بسطرين للتعليق -
// #lldbclient-generated-begin
و// #lldbclient-generated-end
، بحيث تبدو قائمة التكوين الخاصة بك كما يلي:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
يستخدم
lldbclient.py
هذه التعليقات لاكتشاف مكان كتابة التكوين. إذا كانت هناك عناصر أخرى في القائمة، أضف أسطر التعليق إلى النهاية بعد التكوينات الأخرى. - قم بتشغيل الأمر التالي في المحطة حيث قمت بتشغيل
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
هي العلامة الأخيرة إذا كانت موجودة نظرًا لكيفية تحليل العلامات بواسطة الأداة. - افتح الشريط الجانبي Run and Debug - يجب أن يظهر التكوين الجديد في قائمة مصحح الأخطاء. اضغط على بدء التصحيح (F5) . يجب أن يتصل مصحح الأخطاء بعد 10 إلى 30 ثانية.
إذا لم يظهر التكوين الجديد في عرض التشغيل والتصحيح، فأعد تحميل النافذة لتحديث قائمة مصحح الأخطاء - اضغط على Ctrl+Shift+P واكتب
reload window
. - عند الانتهاء من تصحيح الأخطاء، انتقل إلى الوحدة الطرفية التي تقوم بتشغيل
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 .