ניפוי באגים בקוד של הפלטפורמה

‫Android Studio for Platform‏ (ASfP) כולל כלי עוצמתי לניפוי באגים שמאפשר לכם:

  • בוחרים מכשיר לניפוי הבאגים.
  • הגדרת נקודות עצירה בקוד Java,‏ Kotlin,‏ C/C++‎ ו-Rust.
  • בדיקת משתנים והערכת ביטויים בזמן ריצה.

לפני שמשתמשים בכלי לניפוי באגים, צריך לצרוב את ה-build למכשיר או לאמולטור.

ניפוי באגים בתהליך של אפליקציה (Java/Kotlin)

כדי לנפות באגים בתהליך של אפליקציית Java או Kotlin:

  1. מגדירים נקודות עצירה בקוד Java או Kotlin ב-ASfP.

  2. בתפריט, בוחרים באפשרות הפעלה > צירוף כלי לניפוי באגים לתהליך של Android.

  3. בתיבת הדו-שיח Choose Process, מוודאים ש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. בתפריט, בוחרים באפשרות הפעלה > צירוף כלי לניפוי באגים לתהליך של Android.

  3. בתיבת הדו-שיח Choose Process (בחירת תהליך), משנים את Debug type (סוג ניפוי הבאגים) ל-Native Only (רק Native) או ל-Dual (Java + Native) (כפול (Java + Native)).

  4. מסמנים את התיבה הצגת כל התהליכים כדי לראות את תהליכי המערכת.

  5. בוחרים מכשיר מהרשימה.

  6. בוחרים את תהליך המערכת הספציפי שרוצים לנפות בו באגים (למשל surfaceflinger או system_server).

  7. לוחצים על אישור.

  8. כדי להגיע לנקודות העצירה, צריך ליצור אינטראקציה עם המכשיר.

ניפוי באגים ב-Rust

‫ASfP תומך בניפוי באגים ב-Rust באמצעות פרוטוקול מתאם ניפוי הבאגים (DAP) עם LLDB. בקטע הזה מוסבר איך להגדיר את CodeLLDB כשרת מתאם לניפוי באגים ולנפות באגים בקוד Rust במארח ובמכשיר Android.

הגדרת CodeLLDB כשרת מתאם לניפוי באגים

  1. יוצרים הגדרת הרצה/ניפוי באגים חדשה של Debug Adapter Protocol:

    1. בתפריט, בוחרים באפשרות Run > Edit Configurations (הפעלה > עריכת הגדרות).
    2. לוחצים על הלחצן +.
    3. בוחרים באפשרות Debug Adapter Protocol (פרוטוקול מתאם לניפוי באגים).
  2. בכרטיסיית השרת, לוחצים על יצירת שרת חדש.

  3. בתיבת הדו-שיח שנפתחת, לוחצים על Choose template (בחירת תבנית) ובוחרים באפשרות CodeLLDB מהרשימה.

  4. אחרי שבוחרים בתבנית CodeLLDB, השרת החדש מתווסף עם הגדרה מוגדרת מראש.

    1. כדי להפעיל מעקב מפורט, בוחרים באפשרות מפורט בתפריט הנפתח מעקב.
    2. מוסיפים משתנה סביבה שמציין את הנתיב אל lldb-server ב-prebuilts של מקור Android:
        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. פותחים את הכרטיסייה Configuration (הגדרה) בהגדרת ההפעלה או הניפוי באגים של פרוטוקול מתאם ניפוי הבאגים.
  2. בוחרים באפשרות הפעלה בתור מצב ניפוי הבאגים.
  3. מעדכנים את ספריית העבודה ובוחרים את הקובץ הבינארי שרוצים לנפות בו באגים.
  4. לוחצים על אישור כדי לשמור את ההגדרה.
  5. כדי להתחיל את סשן ניפוי הבאגים, לוחצים על סמל ניפוי הבאגים לצד ההגדרה.

בפעם הראשונה שמריצים את הפקודה הזו, CodeLLDB מוריד. אמורים להופיע עקבות של DAP במסוף. נקודות עצירה שהוגדרו בקוד Rust אמורות לפעול כמצופה.

ניפוי באגים בקבצים בינאריים של Rust במכשיר Android (מצב צירוף)

  1. מאתרים את ה-PID: מזהים את מזהה התהליך (PID) של האפליקציה שרוצים לנפות באגים במכשיר Android.

  2. מפעילים את lldb-server במכשיר: מתיקיית הבסיס של עץ המקור של Android, מריצים את הסקריפט lldbclient.py ומחליפים את <PID> במזהה התהליך:

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

    הסקריפט הזה דוחף את lldb-server הנכון למכשיר, מפעיל אותו, מגדיר העברת ליציאה אחרת (יציאת מארח 5039 למכשיר) ומפיק את הגדרת ה-JSON של DAP שנדרשת לשלבים הבאים. משאירים את חלון הטרמינל פתוח.

  3. מפעילים את CodeLLDB Debug Adapter במארח:

    • מנווטים לספריית התוסף 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. חוזרים להגדרת ההפעלה או ניפוי הבאגים של פרוטוקול מתאם ניפוי הבאגים ב-ASfP.
    2. בוחרים את הכרטיסייה Configuration.
    3. מגדירים את מצב ניפוי הבאגים לצירוף.
    4. מגדירים את Address לערך localhost.
    5. מגדירים את Port לערך 1234.
    6. מדביקים את פלט ה-JSON מהפקודה lldbclient.py (שלב 2) בשדה פרמטרים של DAP (JSON).
  5. כדי להתחיל לנפות באגים, לוחצים על ניפוי באגים.

פתרון בעיות

  • אם השגיאה error: Connection shut down by remote side while waiting for reply to initial handshake packet מופיעה, צריך לסיים את סשן הניפוי הנוכחי ולהפעיל מחדש את lldb-server במכשיר ואת מתאם CodeLLDB במארח.