کد سکوی اشکال زدایی

اندروید استودیو برای پلتفرم (ASfP) یک دیباگر قدرتمند ارائه می‌دهد که به شما امکان می‌دهد:

  • دستگاهی را برای اشکال‌زدایی انتخاب کنید.
  • نقاط توقف را در کد جاوا، کاتلین، سی/سی‌پلاس‌پلاس و راست خود تنظیم کنید.
  • متغیرها را بررسی و عبارات را در زمان اجرا ارزیابی کنید.

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

اشکال‌زدایی فرآیند برنامه (جاوا/کاتلین)

برای اشکال‌زدایی فرآیند برنامه جاوا یا کاتلین:

  1. نقاط توقف را در کد جاوا یا کاتلین خود در ASfP تنظیم کنید.

  2. از منو، گزینه‌ی Run > Attach Debugger to Android Process را انتخاب کنید.

  3. در پنجره‌ی «انتخاب فرآیند» ، مطمئن شوید که نوع اشکال‌زدایی (Debug type) روی «فقط جاوا» (Java Only ) تنظیم شده باشد.

  4. دستگاه خود را از لیست انتخاب کنید.

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

  6. روی تأیید کلیک کنید.

  7. برای رسیدن به نقاط توقف، با برنامه روی دستگاه خود تعامل کنید.

اشکال‌زدایی فرآیند سیستم (C/C++)

برای اشکال‌زدایی یک فرآیند سیستمی که با زبان C یا C++ نوشته شده است:

  1. تأیید کنید که فقط یک دستگاه یا شبیه‌ساز در حال اجرا دارید.

  2. یک ترمینال باز کنید و adb root از ریشه پرداخت AOSP خود اجرا کنید: bash adb root

  1. نقاط توقف را در کد C/C++ خود در ASfP تنظیم کنید.

  2. از منو، گزینه‌ی Run > Attach Debugger to Android Process را انتخاب کنید.

  3. در پنجره‌ی «انتخاب فرآیند» ، نوع اشکال‌زدایی (Debug type) را به «فقط بومی» (Native Only ) یا «دوگانه (Java + بومی)» (Dual (Java + Native)) تغییر دهید.

  4. برای مشاهده‌ی فرآیندهای سیستم، گزینه‌ی «نمایش همه فرآیندها» را علامت بزنید.

  5. دستگاه خود را از لیست انتخاب کنید.

  6. فرآیند سیستم خاصی را که می‌خواهید اشکال‌زدایی کنید (مانند surfaceflinger یا system_server ) انتخاب کنید.

  7. روی تأیید کلیک کنید.

  8. برای رسیدن به نقاط شکست خود، با دستگاه تعامل کنید.

اشکال‌زدایی زنگ‌زدگی

ASfP از اشکال‌زدایی Rust با استفاده از پروتکل آداپتور اشکال‌زدایی (DAP) به همراه LLDB پشتیبانی می‌کند. این بخش نحوه راه‌اندازی CodeLLDB به عنوان یک سرور آداپتور اشکال‌زدایی و اشکال‌زدایی کد Rust روی میزبان و روی یک دستگاه اندروید را شرح می‌دهد.

تنظیم CodeLLDB به عنوان سرور آداپتور اشکال‌زدایی

  1. یک پیکربندی جدید برای Debug Adapter Protocol Run/Debug ایجاد کنید:

    1. از منو ، گزینه‌ی اجرا > ویرایش پیکربندی‌ها را انتخاب کنید.
    2. روی دکمه + کلیک کنید.
    3. پروتکل آداپتور اشکال‌زدایی را انتخاب کنید.
  2. در تب سرور، روی ایجاد یک سرور جدید کلیک کنید.

  3. در پنجره‌ی باز شده، روی Choose template کلیک کنید و CodeLLDB را از لیست انتخاب کنید.

  4. پس از انتخاب الگوی CodeLLDB، سرور جدید با پیکربندی از پیش تعریف شده اضافه می‌شود.

    1. با انتخاب Verbose در منوی کشویی Trace ، ردیابی شفاهی (verbose tracing) را فعال کنید.
    2. یک متغیر محیطی اضافه کنید که مسیر lldb-server را در فایل‌های از پیش ساخته شده سورس اندروید شما مشخص کند:
        LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server
        ```
    
    Replace `REPO_ROOT` with the absolute path to your Android source checkout.
    To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of
    your Android source tree:
    
    ```bash
        ./build/soong/scripts/get_clang_version.py
    
    1. بخش <<insert base directory>> را تغییر ندهید .

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

  1. برگه پیکربندی را در پیکربندی Debug Adapter Protocol Run/Debug خود باز کنید.
  2. گزینه «راه‌اندازی» (Launch) را به عنوان حالت اشکال‌زدایی (Debug Mode) انتخاب کنید.
  3. دایرکتوری کاری را به‌روزرسانی کنید و فایل باینری مورد نظر برای اشکال‌زدایی را انتخاب کنید.
  4. برای ذخیره پیکربندی، روی تأیید کلیک کنید.
  5. با کلیک روی نماد اشکال‌زدایی در کنار پیکربندی، جلسه اشکال‌زدایی را آغاز کنید.

اولین باری که این را اجرا می‌کنید، CodeLLDB دانلود می‌شود. باید ردپاهای DAP را در کنسول ببینید. نقاط شکست تنظیم شده در کد Rust شما باید مطابق انتظار اعمال شوند.

اشکال‌زدایی فایل‌های باینری Rust در دستگاه اندروید (حالت پیوست)

  1. پیدا کردن PID: شناسه فرآیند (PID) برنامه‌ای را که می‌خواهید روی دستگاه اندروید اشکال‌زدایی کنید، شناسایی کنید.

  2. شروع lldb-server روی دستگاه: از ریشه‌ی بررسی درخت سورس اندروید خود، اسکریپت lldbclient.py را اجرا کنید و <PID> را با شناسه‌ی فرآیند جایگزین کنید:

    lldbclient.py --setup-forwarding vscode-lldb -p <PID>
    

    این اسکریپت lldb-server صحیح را به دستگاه ارسال می‌کند، آن را راه‌اندازی می‌کند، پورت فورواردینگ (پورت میزبان ۵۰۳۹ به دستگاه) را تنظیم می‌کند و پیکربندی DAP JSON مورد نیاز برای مراحل بعدی را خروجی می‌دهد. این ترمینال را باز نگه دارید.

  3. آداپتور اشکال‌زدایی CodeLLDB را روی میزبان اجرا کنید:

    • به دایرکتوری افزونه CodeLLDB بروید (پیش‌فرض: ~/.lsp4ij/dap/codelldb/extension/adapter ).
    • متغیرهای محیطی مورد نیاز را تنظیم کرده و سرور آداپتور را راه‌اندازی کنید، و REPO_ROOT و CLANG_VERSION را همانطور که در تنظیمات سرور تعیین شده است، جایگزین کنید:
        # Sets PYTHONHOME env variable
        export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3
    
        # Tell the dynamic linker where to find python libs
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib
    
        # Starts the CodeLLDB Debugger Adapter server on port 1234
        ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234
    
  4. پیکربندی کلاینت ASfP DAP:

    1. به پیکربندی Debug Adapter Protocol Run/Debug در ASfP برگردید.
    2. برگه پیکربندی را انتخاب کنید.
    3. حالت اشکال‌زدایی را روی پیوست تنظیم کنید.
    4. آدرس را روی localhost تنظیم کنید.
    5. پورت را روی 1234 تنظیم کنید.
    6. خروجی JSON از دستور lldbclient.py (مرحله 2) را در فیلد پارامترهای DAP (JSON) قرار دهید.
  5. برای شروع جلسه اشکال‌زدایی، روی اشکال‌زدایی (Debug) کلیک کنید.

عیب‌یابی

  • اگر error: Connection shut down by remote side while waiting for reply to initial handshake packet ، جلسه اشکال‌زدایی فعلی را خاتمه دهید و lldb-server روی دستگاه و آداپتور CodeLLDB را روی میزبان مجدداً راه‌اندازی کنید.