דף זה מפרט את השימוש ב- LLDB או GDB לפיתוח מערכת ההפעלה. לפיתוח אפליקציה, עיין במקום זאת באיתור באגים באפליקציה שלך , המסביר כיצד להשתמש ב-Android Studio GUI (מבוסס על LLDB).
GDB הוצא משימוש והוא יוסר בקרוב. אם אתה עובר מ-GDB ל-LLDB, כנראה שתתחיל בקריאת המדריך של LLDB . אם אתה משתמש GDB מומחה, מפת הפקודות GDB ל-LLDB מועילה מאוד בזמן המעבר.
דרישות מוקדמות
כדי להשתמש באגים:
- הגדר את סביבת הבנייה עם הפקודה הרגילה
envsetup.sh
. - הפעל את אותה פקודת
lunch
שבה השתמשת בעת הבנייה.
לעזרה נוספת בהגדרת הסביבה שלך, ראה הגדרת סביבה .
איתור באגים באפליקציות או תהליכים הפועלים
כדי להתחבר לאפליקציה פועלת או לדמון מקורי, השתמש ב- gdbclient.py
עם PID. לדוגמה, כדי לנפות באגים בתהליך עם PID 1234, הפעל את זה על המארח:
gdbclient.py -p 1234
הסקריפט מגדיר העברת יציאות, מפעיל את קטע ניפוי הבאגים המרוחק המתאים במכשיר, מפעיל את ה-debugger במארח, מגדיר אותו למצוא סמלים ומחבר אותו ל-debuging stub המרוחק.
איתור באגים אתחול תהליך מקורי
כדי לנפות באגים בתהליך כשהוא מתחיל, השתמש ב- gdbclient.py
עם האפשרות -r
. לדוגמה, כדי לנפות באגים ls /bin
, הפעל את זה על המארח:
gdbclient.py -r /system/bin/ls /bin
לאחר מכן, הזן continue
בהנחיה של מאתר הבאגים.
אתחול אפליקציית ניפוי באגים
לפעמים אתה רוצה לנפות באגים באפליקציה כשהיא מתחילה, למשל כאשר יש קריסה ואתה רוצה לעבור דרך הקוד כדי לראות מה קרה לפני הקריסה. ההצמדה עובדת בחלק מהמקרים, אך במקרים אחרים היא בלתי אפשרית כי האפליקציה קורסת לפני שתוכל לצרף. גישת ה- logwrapper
(בשימוש עבור strace
) לא תמיד עובדת מכיוון שלאפליקציה אין הרשאות לפתוח פורט, ו- gdbserver
יורש את ההגבלה הזו.
כדי לנפות באגים באתחול האפליקציה, השתמש באפשרויות המפתחים בהגדרות כדי להורות לאפליקציה להמתין לצירוף מאתר באגים של Java:
- עבור אל הגדרות > אפשרויות מפתח > בחר אפליקציית ניפוי באגים ובחר את האפליקציה שלך מהרשימה, ולאחר מכן לחץ על המתן לאיפוי באגים .
- הפעל את האפליקציה, מהמפעיל או באמצעות שורת הפקודה להפעלה:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- המתן עד שהאפליקציה תיטען ותופיע תיבת דו-שיח שאומרת לך שהאפליקציה ממתינה לניפוי באגים.
- צרף
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
ישהה תהליכים שקרסו כדי שתוכל לצרף באגים, הגדר את המאפיין המתאים:
- אחרי 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 המציגות כיצד לחבר את מאפר הבאגים לתהליך התרסק.
איתור באגים ללא סמלים
עבור ARM של 32 סיביות, אם אין לך סמלים, gdb
לא יכול לקבוע איזה סט הוראות הוא מפרק (ARM או Thumb). כדי לציין את ערכת ההוראות שנבחרה כברירת מחדל כאשר חסר מידע על סמלים, הגדר את המאפיין הבא:
set arm fallback-mode arm # or thumb
איתור באגים עם קוד VS
LLDB תומך בקוד ניפוי באגים בפלטפורמת Visual Studio Code . אתה יכול להשתמש בממשק ה-VS Code debugger במקום בממשק LLDB CLI כדי לשלוט ולאפות באגים בקוד מקורי הפועל במכשירים.
לפני השימוש ב- VS Code לניפוי באגים, התקן את התוסף CodeLLDB .
כדי לנפות באגים בקוד באמצעות קוד VS:
- ודא שכל חפצי הבנייה (כגון סמלים) הנדרשים להפעלת
gdbclient.py
אוlldbclient.py
קיימים. - הפעל את הפקודה הבאה:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
פעולה זו מדפיסה אובייקט JSON ו-
lldbclient.py
ממשיך לפעול. זה צפוי; אל תהרוג את התוכניתlldbclient.py
.הדגל
-r
חייב להיות הדגל האחרון אם הוא קיים בגלל האופן שבו הדגלים מופרחים על ידי הכלי. - בלשונית איתור באגים בקוד VS, בחר הוסף תצורה ולאחר מכן בחר LLDB: הפעלה מותאמת אישית . פעולה זו פותחת קובץ
launch.json
ומוסיפה אובייקט JSON חדש לרשימה. - מחק את תצורת ניפוי הבאגים החדשה שנוספה.
- העתק את אובייקט ה-JSON שהודפס על ידי
lldbclient.py
והדבק אותו באובייקט שזה עתה מחקת. שמור את השינויים. - כדי לטעון מחדש את החלון כדי לרענן את רשימת באגים, הקש Ctrl+Shift+P והקלד
reload window
. - בחר את תצורת ניפוי הבאגים החדשה ולחץ על הפעלה . מאתר הבאגים אמור להתחבר לאחר 10 עד 30 שניות.
- כשתסיים לנפות באגים, עבור אל הטרמינל שבו פועל
lldbclient.py
והקש Enter כדי לסיים את התוכניתlldbclient.py
.