דף זה מפרט את השימוש ב-LLDB או GDB לפיתוח מערכת ההפעלה. לפיתוח אפליקציה, עיין במקום זאת באיתור באגים באפליקציה שלך , המסביר כיצד להשתמש ב-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
gdbclient.py --port 5038 -r /data/local/tmp/test.exe
איתור באגים באפליקציות או תהליכים הפועלים
כדי להתחבר לאפליקציה פועלת או לדמון מקורי, השתמש 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
קיימים. - בקוד VS, הקש Ctrl+Shift+P כדי להפעיל פקודה, חפש Debug: Add Configuration... ולאחר מכן בחר LLDB . פעולה זו פותחת קובץ
launch.json
ומוסיפה אובייקט JSON חדש לרשימה. - החלף את תצורת ניפוי הבאגים החדשה שנוספה בשתי שורות הערה -
// #lldbclient-generated-begin
ו// #lldbclient-generated-end
, כך שרשימת התצורה שלך תיראה כך:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
משתמש בהערות אלו כדי לזהות היכן לכתוב את התצורה. אם יש פריטים אחרים ברשימה, הוסף את שורות ההערה לסוף לאחר התצורות האחרות. - הפעל את הפקודה הבאה בטרמינל שבו הפעלת
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
חייב להיות הדגל האחרון אם הוא קיים בגלל האופן שבו הדגלים מופרחים על ידי הכלי. - פתחו את סרגל הצד ההפעלה וניפוי באגים - התצורה החדשה אמורה להופיע ברשימת ניפוי הבאגים. לחץ על התחל איתור באגים (F5) . מאתר הבאגים אמור להתחבר לאחר 10 עד 30 שניות.
אם התצורה החדשה לא הופיעה בתצוגת הפעלה וניפוי באגים, טען מחדש את החלון כדי לרענן את רשימת ניפוי הבאגים - הקש Ctrl+Shift+P והקלד
reload window
. - כשתסיים לנפות באגים, עבור אל הטרמינל שבו פועל
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 .