בדף הזה מוסבר איך משתמשים ב-LLDB לפיתוח מערכת הפעלה. לפיתוח אפליקציות, מומלץ לקרוא את המאמר ניפוי באגים באפליקציה, שבו מוסבר איך להשתמש בממשק המשתמש של Android Studio (שמבוסס על LLDB).
אין יותר תמיכה ב-GDB או אפשרות לקבל אותו. אם אתם עוברים מ-GDB ל-LLDB, מומלץ להתחיל בקריאת המדריך ל-LLDB. אם אתם משתמשים מומחים ב-GDB, מפת הפקודות של GDB ל-LLDB תעזור לכם מאוד במהלך המעבר.
דרישות מוקדמות
כדי להשתמש בכלי לניפוי באגים:
- מגדירים את סביבת ה-build באמצעות הפקודה
envsetup.sh
הרגילה. - מריצים את אותה פקודת
lunch
שבה השתמשתם בזמן ה-build. חשוב לזכור שהמכשיר צריך להתאים בדיוק למכשיר שבו מבצעים את ניפוי הבאגים. אם פריט הארוחה לא תואם למכשיר המחובר, תופיע הודעת שגיאה בפורמט הבא: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
הסקריפט מגדיר העברה אוטומטית של יציאות, מפעיל את הסטאב המתאים לניפוי באגים מרחוק במכשיר, מפעיל את מנתח הבאגים במארח, מגדיר אותו למצוא סמלים ומחבר אותו לסטאב לניפוי באגים מרחוק.
ניפוי באגים בהפעלה של תהליך מקורי
כדי לנפות באגים בתהליך בזמן שהוא מתחיל, משתמשים ב-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
- ממתינים עד שהאפליקציה נטענת ותיפתח תיבת דו-שיח עם ההודעה שהאפליקציה ממתינה לכלי לניפוי באגים.
- מחברים את
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
- Android 6.0 Marshmallow וגרסאות ישנות יותר
adb shell setprop debug.db.uid 999999
בסוף הפלט הרגיל של קריסה, debuggerd
מספק הוראות להעתקה ולהדבקה ב-logcat שמראה איך לחבר את מנתח הבאגים לתהליך שהוביל לקריסה.
ניפוי באגים באמצעות VS Code
LLDB תומך בניפוי באגים בקוד הפלטפורמה ב-Visual Studio Code. אפשר להשתמש בממשק הקצה של VS Code לניפוי באגים במקום בממשק ה-CLI של LLDB כדי לשלוט בקוד מקומי שפועל במכשירים ולבצע בו ניפוי באגים.
לפני שמשתמשים ב-VS Code לניפוי באגים, צריך להתקין את התוסף CodeLLDB.
כדי לנפות באגים בקוד באמצעות VS Code:
- מוודאים שכל הפריטים שנוצרו בתהליך ה-build (כמו סמלים) הנדרשים להרצה של
lldbclient.py
אוlldbclient.py
נמצאים. - ב-VS Code, מקישים על 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
חייב להיות הדגל האחרון אם הוא מופיע, בגלל האופן שבו הדגלים מנותחים על ידי הכלי. - פותחים את סרגל הצד Run and Debug – ההגדרה החדשה אמורה להופיע ברשימת מנתח הבאגים. מקישים על הפעלת ניפוי באגים (F5). מנתח הבאגים אמור להתחבר תוך 10 עד 30 שניות.
אם התצורה החדשה לא מופיעה בתצוגה Run and Debug, צריך לטעון מחדש את החלון כדי לרענן את רשימת מנתח הבאגים – מקישים על 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"}' \
...
Build
לפני ניפוי הבאגים, וגם להוסיף שלב חדש של איפוס לצורך ניפוי באגים לשלבים שנוצרו על ידי הסקריפט. סקירה כללית של המאפיינים הזמינים מופיעה
במסמכי העזרה של VS Code ובמדריך למשתמש של
התוסף CodeLLDB.