استفاده از اشکال‌زداها

این صفحه جزئیات استفاده از 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 را به‌طور معمول پیوست کنید، نقطه‌های گسست را تنظیم کنید، سپس فرایند را ادامه دهید.

برای اینکه اجازه دهید برنامه اجرا شود، اشکال‌زدای «پروتکل سیم اشکال‌زدایی جاوا» (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:

  1. مطمئن شوید که همه آرتیفکت‌های ساخت (مثل نمادها) موردنیاز برای اجرای lldbclient.py یا lldbclient.py موجود است.
  2. در VS Code، برای اجرای فرمان، Ctrl+Shift+P را فشار دهید، Debug: Add Configuration...‎ را جستجو کنید، سپس 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) را فشار دهید. اشکال‌زدا باید پس‌از ۱۰ تا ۳۰ ثانیه متصل شود.

    اگر پیکربندی جدید در نمای «اجرا و اشکال‌زدایی» ظاهر نشد، پنجره را مجدد بار کنید تا فهرست اشکال‌زدا بازآوری شود - 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 پیدا کنید.