פרטי הדף הזה באמצעות LLDB לפיתוח מערכת הפעלה. מידע על פיתוח אפליקציות זמין במאמר ניפוי באגים באפליקציה במקום זאת, שמסביר איך להשתמש ב-GUI של Android Studio (על סמך LLDB).
GDB לא נתמך או מסופק יותר. אם עוברים מ-GDB ל-LLDB, כדאי להתחיל בקריאת מדריך LLDB. אם אתם משתמשים מומחים של GDB, מפת הפקודות של GDB ל-LLDB מאוד שימושי במהלך המעבר.
דרישות מוקדמות
כדי להשתמש בכלי לניפוי באגים:
- מגדירים את סביבת ה-build באמצעות הפקודה הרגילה
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
ניפוי באגים באפליקציות או בתהליכים פועלים
כדי להתחבר לאפליקציה ריצה או לדימון (daemon) מקורי, צריך להשתמש
lldbclient.py
עם PID. לדוגמה, כדי לנפות באגים בתהליך באמצעות PID
1234, מריצים את הפקודה הבאה במארח:
lldbclient.py -p 1234
הסקריפט מגדיר העברה ליציאה אחרת, מתחיל את הפעולה המתאימה stub של ניפוי באגים מרחוק במכשיר, מפעיל את ניפוי הבאגים על המארח, מגדיר אותו למצוא סמלים ומחבר אותו ל-stub של ניפוי הבאגים מרחוק.
הפעלה של ניפוי באגים בתהליך מקורי
כדי לנפות באגים בתהליך כשהוא מתחיל, צריך להשתמש ב-lldbclient.py
עם -r
כאפשרות. לדוגמה, כדי לנפות באגים ב-ls /bin
, מריצים את הפקודה הבאה במארח:
lldbclient.py -r /system/bin/ls /bin
אחר כך מזינים continue
בהנחיה של הכלי לניפוי באגים.
ניפוי באגים בזמן ההפעלה
לפעמים רוצים לנפות באגים באפליקציה כשהיא מופעלת, למשל במקרה של קריסה
ואתם רוצים לעבור על הקוד כדי לראות מה קרה לפני הקריסה.
צירוף מתאים במקרים מסוימים, אבל במקרים אחרים
בלתי אפשרי כי האפליקציה קורסת לפני שניתן לצרף אותה.
גישה של logwrapper
(משמשת ל-strace
)
לא תמיד פועל כי יכול להיות שהאפליקציה לא
ההרשאות לפתיחת יציאה, ו-lldbserver
יורש את
המוגבלות של המשאבים.
כדי לנפות באגים בהפעלת האפליקציה, צריך להשתמש באפשרויות למפתחים בהגדרות את האפליקציה כדי לחכות שהכלי לניפוי באגים ב-Java יצרף:
- עוברים אל הגדרות > אפשרויות למפתחים > בוחרים את האפליקציה לניפוי באגים ובוחרים האפליקציה מהרשימה ולאחר מכן לוחצים על המתנה לכלי לניפוי באגים.
- מפעילים את האפליקציה, ממרכז האפליקציות או באמצעות שורת הפקודה שמריצים:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- מחכים שהאפליקציה תיטען ותופיע תיבת דו-שיח עם הודעה וממתינים לכלי לניפוי באגים.
- מחברים
lldbclient
/lldbserver
כרגיל, נקודות עצירה (breakpoint), ואז ממשיכים בתהליך.
כדי לאפשר לאפליקציה לפעול, יש לצרף פרוטוקול 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
- Android 6.0 Marshmallow ומטה
adb shell setprop debug.db.uid 999999
בסוף פלט הקריסה הרגיל, debuggerd
מספק העתקה והדבקה
הוראות ב-Logcat שמראות איך לחבר את הכלי לניפוי באגים לתהליך קריסה.
ניפוי באגים באמצעות קוד VS
LLDB תומך בקוד פלטפורמה לניפוי באגים ב- Visual Studio Code. תוכלו להשתמש בממשק הקדמי של הכלי לניפוי באגים VS במקום בממשק LLDB CLI כדי לשלוט קוד נייטיב לניפוי באגים שפועל במכשירים.
לפני שמשתמשים ב-VS Code לניפוי באגים, יש להתקין את התוסף CodeLLDB.
כדי לנפות באגים בקוד באמצעות VS Code:
- מוודאים שכל ארטיפקטים (כמו סמלים) של build שנדרשים כדי לפעול
lldbclient.py
אוlldbclient.py
קיימים. - ב-VS Code, מקישים על Ctrl+Shift+P כדי להריץ פקודה, מחפשים את Debug:
מוסיפים הגדרה... ואז בוחרים 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
חייב להיות הדגל האחרון אם הוא קיים בשל אופן ניתוח הדגלים על ידי הכלי. - פותחים את סרגל הצד Run and Debug (הרצה וניפוי באגים). ההגדרה החדשה אמורה להופיע
והכלי לניפוי באגים. מקישים על התחלת ניפוי באגים (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.