שימוש באגים

דף זה מפרט את השימוש ב-LLDB לפיתוח מערכת ההפעלה. לפיתוח אפליקציה, עיין במקום זאת באיתור באגים באפליקציה שלך , המסביר כיצד להשתמש ב-Android Studio GUI (מבוסס על 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

הסקריפט מגדיר העברת יציאות, מפעיל את קטע ניפוי הבאגים המרוחק המתאים במכשיר, מפעיל את ה-debugger במארח, מגדיר אותו למצוא סמלים ומחבר אותו ל-debuging stub המרוחק.

איתור באגים אתחול תהליך מקורי

כדי לנפות באגים בתהליך כשהוא מתחיל, השתמש 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 כרגיל, הגדר נקודות עצירה ולאחר מכן המשך בתהליך.

כדי לאפשר לאפליקציה לפעול, צרף מנפה באגים של 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 ישהה ​​תהליכים שקרסו כדי שתוכל לצרף באגים, הגדר את המאפיין המתאים:

  • אחרי Android 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 ומטה
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • אנדרואיד 6.0 מרשמלו ומעלה
    adb shell setprop debug.db.uid 999999
    

בסיום פלט הקריסה הרגיל, debuggerd מספק הוראות העתקה והדבקה ב-logcat המציגות כיצד לחבר את מאפר הבאגים לתהליך התרסק.

איתור באגים עם קוד VS

LLDB תומך בקוד ניפוי באגים בפלטפורמת Visual Studio Code . אתה יכול להשתמש בממשק ה-VS Code debugger במקום בממשק LLDB CLI כדי לשלוט ולאפות באגים בקוד מקורי הפועל במכשירים.

לפני השימוש ב- VS Code לניפוי באגים, התקן את התוסף CodeLLDB .

כדי לנפות באגים בקוד באמצעות קוד VS:

  1. ודא שכל חפצי הבנייה (כגון סמלים) הנדרשים להפעלת lldbclient.py או lldbclient.py קיימים.
  2. בקוד VS, הקש 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) . מאתר הבאגים אמור להתחבר לאחר 10 עד 30 שניות.

    אם התצורה החדשה לא הופיעה בתצוגת הפעלה וניפוי באגים, טען מחדש את החלון כדי לרענן את רשימת ניפוי הבאגים - הקש 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 .