این صفحه جزئیات استفاده از 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.exelldbclient.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را بهطور معمول پیوست کنید، نقطههای گسست را تنظیم کنید، سپس فرایند را ادامه دهید.
برای اینکه اجازه دهید برنامه اجرا شود، اشکالزدای «پروتکل سیم اشکالزدایی جاوا» (JDWP) مانند «اشکالزدای جاوا» (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 Code
LLDB از اشکالزدایی کد پلاتفرم در Visual Studio Code پشتیبانی میکند. میتوانید بهجای رابط LLDB CLI از واسط کاربری اشکالزدای VS Code برای کنترل و اشکالزدایی کد بومی درحال اجرا در دستگاهها استفاده کنید.
قبلاز استفاده از VS Code برای اشکالزدایی، افزونه CodeLLDB را نصب کنید.
برای اشکالزدایی کد بااستفاده از VS Code:
- مطمئن شوید که همه آرتیفکتهای ساخت (مثل نمادها) موردنیاز برای اجرای
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باید آخرین پرچم باشد، اگر بهدلیل نحوه تجزیه پرچمها توسط ابزار وجود داشته باشد. - نوار کناری اجرا و اشکالزدایی را باز کنید - پیکربندی جدید باید در فهرست اشکالزدا ظاهر شود. شروع اشکالزدایی (F5) را فشار دهید. اشکالزدا باید پساز
۱۰ تا ۳۰ ثانیه متصل شود.
اگر پیکربندی جدید در نمای «اجرا و اشکالزدایی» ظاهر نشد، پنجره را مجدد بار کنید تا فهرست اشکالزدا بازآوری شود - 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"}' \
...Build را قبلاز اشکالزدایی اجرا کند و
مرحله جدیدی برای مقداردهی اولیه اشکالزدایی به مراحل تولیدشده توسط نوشتار اضافه میکند. نمای کلی داراییهای دردسترس را میتوانید در
مستندات VS Code و در «راهنمای کاربر»
افزونه CodeLLDB پیدا کنید.