با استفاده از اشکال زدایی

این صفحه جزئیات با استفاده از LLDB یا GDB برای توسعه سیستم عامل. برای توسعه برنامه، و برنامه خود را اشکال زدایی به جای آن، توضیح می دهد که چگونه به استفاده از رابط کاربری گرافیکی استودیو آندروید (بر اساس LLDB).

GDB منسوخ شده است و به زودی حذف خواهد شد. اگر شما در حال تغییر از GDB به LLDB، شما احتمالا باید با خواندن شروع LLDB آموزش . اگر شما یک کاربر متخصص GDB هستید، GDB به LLDB نقشه فرمان گذار در حالی که بسیار مفید است.

پیش نیازها

برای استفاده از اشکال زدایی:

  • تنظیم محیط ساخت با معمول envsetup.sh فرمان.
  • اجرای همان lunch دستور شما استفاده می شود زمانی که ساختمان.

برای راهنمایی بیشتر با راه اندازی محیط زیست خود را، و راه اندازی محیط زیست .

اشکال زدایی برنامه ها یا فرآیندهای در حال اجرا

برای اتصال به یک برنامه در حال اجرا یا شبح بومی، استفاده gdbclient.py با PID. به عنوان مثال، برای اشکال زدایی فرآیند با PID 1234، این را در هاست اجرا کنید:

gdbclient.py -p 1234

اسکریپت ارسال پورت را راه‌اندازی می‌کند، خرد اشکال‌زدایی از راه دور مناسب را روی دستگاه راه‌اندازی می‌کند، دیباگر را روی میزبان راه‌اندازی می‌کند، آن را برای یافتن نمادها پیکربندی می‌کند، و آن را به خرد اشکال‌زدایی راه دور متصل می‌کند.

اشکال زدایی راه اندازی فرآیند بومی

برای اشکالزدایی یک فرایند به عنوان آن شروع می شود، استفاده از gdbclient.py با -r گزینه است. برای مثال، برای اشکال زدایی ls /bin ، این اجرا بر روی میزبان:

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

سپس، وارد continue در دیباگر را سریع.

اشکال زدایی راه اندازی برنامه

گاهی اوقات شما می خواهید برای اشکالزدایی برنامه به عنوان آن شروع می شود، مانند زمانی که یک تصادف وجود دارد و شما می خواهید از طریق کد گام تا ببینید که چه قبل از سقوط اتفاق افتاده است. اتصال آثار در برخی موارد، اما در موارد دیگر غیر ممکن است به این دلیل که برنامه قفل قبل از شما می توانید ضمیمه کنید. logwrapper رویکرد (مورد استفاده برای strace ) همیشه کار نمی کند، زیرا این برنامه ممکن است مجوز برای باز کردن یک پورت، و نه gdbserver ارث می برد که محدودیت.

برای اشکال‌زدایی راه‌اندازی برنامه، از گزینه‌های توسعه‌دهنده در تنظیمات استفاده کنید تا به برنامه دستور دهید منتظر بماند تا اشکال‌زدای جاوا پیوست شود:

  1. برو به تنظیمات> گزینه های توسعه> انتخاب برنامه رفع اشکال و برنامه خود را از لیست انتخاب کنید، سپس با کلیک منتظر دیباگر.
  2. شروع برنامه، هم از پرتاب و یا با استفاده از خط فرمان برای اجرا:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. منتظر بمانید تا برنامه بارگیری شود و یک گفتگو ظاهر شود که به شما می گوید برنامه منتظر اشکال زدایی است.
  4. ضمیمه gdbserver / gdbclient به طور معمول، نقاط شکست مجموعه، پس از آن روند ادامه خواهد داد.

برای اجرای برنامه ، یک اشکال زدایی 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 را به حالت تعلیق فرآیندهای سقوط کرد به طوری که شما می توانید یک دیباگر ضمیمه، تنظیم اموال مناسب:

  • پس از آندروید 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • آندروید 11 و پایین تر
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • آندروید 6.0 و پایین تر باد صبا
    adb shell setprop debug.db.uid 999999
    

در پایان خروجی تصادف معمول، debuggerd کپی فراهم می کند و دستورالعمل ها در logcat و نشان میدهد که چگونه برای اتصال دیباگر به روند سقوط را بچسبانید.

اشکال زدایی بدون علامت

برای ARM 32 بیتی، اگر شما علامت را نداشته باشند، gdb نمی تواند تعیین کند که مجموعه دستورالعمل آن را باز کردن قطعات (ARM یا نما). برای تعیین مجموعه دستورالعمل های انتخاب شده به عنوان پیش فرض هنگامی که اطلاعات نماد گم شده است ، ویژگی زیر را تنظیم کنید:

set arm fallback-mode arm  # or thumb

اشکال زدایی با کد VS

LLDB پشتیبانی از اشکال زدایی کد پلت فرم در ویژوال استودیو کد . برای کنترل و اشکال زدایی کد بومی اجرا شده در دستگاه ها ، می توانید به جای رابط LLDB CLI از پیش نماینده اشکال زدایی VS Code استفاده کنید.

قبل از استفاده از کد VS برای اشکال زدایی، نصب پسوند CodeLLDB .

برای اشکال زدایی کد با استفاده از کد VS:

  1. اطمینان حاصل شود که تمام مصنوعات ساخت (مانند علامت) مورد نیاز برای اجرای gdbclient.py یا lldbclient.py حضور دارند.
  2. فرمان زیر را اجرا:
    lldbclient.py --setup-forwarding
          vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    این چاپ یک شی JSON و lldbclient.py همچنان در حال اجرا. این انتظار می رود؛ انجام کشتن نیست lldbclient.py برنامه است.

    -r پرچم باید آخرین پرچم بود اگر آن حاضر با توجه به چگونگی پرچم توسط ابزار تجزیه است.

  3. در تب اشکال زدایی در VS کد، پیکربندی افزودن را انتخاب کنید، و سپس LLDB را انتخاب کنید: سفارشی راه اندازی. این باز می شود launch.json فایل و می افزاید: یک شی JSON جدید به لیست.
  4. پیکربندی اشکال زدایی جدید اضافه شده را حذف کنید.
  5. کپی شی JSON چاپ شده توسط lldbclient.py و آن را به جسم شما فقط حذف بچسبانید. تغییرات را ذخیره کنید.
  6. برای بارگذاری مجدد پنجره به روز کردن لیست دیباگر، از کلیدهای Ctrl + Shift + P و نوع reload window .
  7. پیکربندی دیباگر و مطبوعات جدید Run را انتخاب کنید. اشکال زدایی باید بعد از 10 تا 30 ثانیه متصل شود.
  8. هنگامی که شما اشکال زدایی انجام می شود، به در حال اجرا ترمینال رفتن lldbclient.py و Enter را فشار دهید برای پایان دادن به lldbclient.py برنامه است.