Android Studio for Platform (ASfP) כולל כלי עוצמתי לניפוי באגים שמאפשר לכם:
- בוחרים מכשיר לניפוי הבאגים.
- הגדרת נקודות עצירה בקוד Java, Kotlin, C/C++ ו-Rust.
- בדיקת משתנים והערכת ביטויים בזמן ריצה.
לפני שמשתמשים בכלי לניפוי באגים, צריך לצרוב את ה-build למכשיר או לאמולטור.
ניפוי באגים בתהליך של אפליקציה (Java/Kotlin)
כדי לנפות באגים בתהליך של אפליקציית Java או Kotlin:
מגדירים נקודות עצירה בקוד Java או Kotlin ב-ASfP.
בתפריט, בוחרים באפשרות הפעלה > צירוף כלי לניפוי באגים לתהליך של Android.
בתיבת הדו-שיח Choose Process, מוודאים שDebug type מוגדר ל-Java Only.
בוחרים מכשיר מהרשימה.
בוחרים את תהליך האפליקציה הספציפי שרוצים לנפות בו באגים.
לוחצים על אישור.
כדי להגיע לנקודות העצירה, יוצרים אינטראקציה עם האפליקציה במכשיר.
ניפוי באגים בתהליך מערכת (C/C++)
כדי לנפות באגים בתהליך מערכת שנכתב ב-C או ב-C++:
מוודאים שפועל רק מכשיר אחד או אמולטור אחד.
פותחים טרמינל ומריצים את הפקודה
adb rootמהספרייה הראשית של AOSP:bash adb root
מגדירים נקודות עצירה בקוד C/C++ ב-ASfP.
בתפריט, בוחרים באפשרות הפעלה > צירוף כלי לניפוי באגים לתהליך של Android.
בתיבת הדו-שיח Choose Process (בחירת תהליך), משנים את Debug type (סוג ניפוי הבאגים) ל-Native Only (רק Native) או ל-Dual (Java + Native) (כפול (Java + Native)).
מסמנים את התיבה הצגת כל התהליכים כדי לראות את תהליכי המערכת.
בוחרים מכשיר מהרשימה.
בוחרים את תהליך המערכת הספציפי שרוצים לנפות בו באגים (למשל
surfaceflingerאוsystem_server).לוחצים על אישור.
כדי להגיע לנקודות העצירה, צריך ליצור אינטראקציה עם המכשיר.
ניפוי באגים ב-Rust
ASfP תומך בניפוי באגים ב-Rust באמצעות פרוטוקול מתאם ניפוי הבאגים (DAP) עם LLDB. בקטע הזה מוסבר איך להגדיר את CodeLLDB כשרת מתאם לניפוי באגים ולנפות באגים בקוד Rust במארח ובמכשיר Android.
הגדרת CodeLLDB כשרת מתאם לניפוי באגים
יוצרים הגדרת הרצה/ניפוי באגים חדשה של Debug Adapter Protocol:
- בתפריט, בוחרים באפשרות Run > Edit Configurations (הפעלה > עריכת הגדרות).
- לוחצים על הלחצן +.
- בוחרים באפשרות Debug Adapter Protocol (פרוטוקול מתאם לניפוי באגים).
בכרטיסיית השרת, לוחצים על יצירת שרת חדש.
בתיבת הדו-שיח שנפתחת, לוחצים על Choose template (בחירת תבנית) ובוחרים באפשרות CodeLLDB מהרשימה.
אחרי שבוחרים בתבנית CodeLLDB, השרת החדש מתווסף עם הגדרה מוגדרת מראש.
- כדי להפעיל מעקב מפורט, בוחרים באפשרות מפורט בתפריט הנפתח מעקב.
- מוסיפים משתנה סביבה שמציין את הנתיב אל
lldb-serverב-prebuilts של מקור Android:
LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server ``` Replace `REPO_ROOT` with the absolute path to your Android source checkout. To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of your Android source tree: ```bash ./build/soong/scripts/get_clang_version.py- אל תשנו את הקטע
<<insert base directory>>.
ניפוי באגים בקבצים בינאריים של Rust במארח
- פותחים את הכרטיסייה Configuration (הגדרה) בהגדרת ההפעלה או הניפוי באגים של פרוטוקול מתאם ניפוי הבאגים.
- בוחרים באפשרות הפעלה בתור מצב ניפוי הבאגים.
- מעדכנים את ספריית העבודה ובוחרים את הקובץ הבינארי שרוצים לנפות בו באגים.
- לוחצים על אישור כדי לשמור את ההגדרה.
- כדי להתחיל את סשן ניפוי הבאגים, לוחצים על סמל ניפוי הבאגים לצד ההגדרה.
בפעם הראשונה שמריצים את הפקודה הזו, CodeLLDB מוריד. אמורים להופיע עקבות של DAP במסוף. נקודות עצירה שהוגדרו בקוד Rust אמורות לפעול כמצופה.
ניפוי באגים בקבצים בינאריים של Rust במכשיר Android (מצב צירוף)
מאתרים את ה-PID: מזהים את מזהה התהליך (PID) של האפליקציה שרוצים לנפות באגים במכשיר Android.
מפעילים את lldb-server במכשיר: מתיקיית הבסיס של עץ המקור של Android, מריצים את הסקריפט
lldbclient.pyומחליפים את<PID>במזהה התהליך:lldbclient.py --setup-forwarding vscode-lldb -p <PID>הסקריפט הזה דוחף את
lldb-serverהנכון למכשיר, מפעיל אותו, מגדיר העברת ליציאה אחרת (יציאת מארח 5039 למכשיר) ומפיק את הגדרת ה-JSON של DAP שנדרשת לשלבים הבאים. משאירים את חלון הטרמינל פתוח.מפעילים את CodeLLDB Debug Adapter במארח:
- מנווטים לספריית התוסף CodeLLDB (ברירת מחדל:
~/.lsp4ij/dap/codelldb/extension/adapter). - מגדירים את משתני הסביבה הנדרשים ומפעילים את שרת המתאם, ומחליפים את
REPO_ROOTואתCLANG_VERSIONבהתאם להגדרות השרת:
# Sets PYTHONHOME env variable export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3 # Tell the dynamic linker where to find python libs export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib # Starts the CodeLLDB Debugger Adapter server on port 1234 ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234- מנווטים לספריית התוסף CodeLLDB (ברירת מחדל:
הגדרת לקוח ASfP DAP:
- חוזרים להגדרת ההפעלה או ניפוי הבאגים של פרוטוקול מתאם ניפוי הבאגים ב-ASfP.
- בוחרים את הכרטיסייה Configuration.
- מגדירים את מצב ניפוי הבאגים לצירוף.
- מגדירים את Address לערך
localhost. - מגדירים את Port לערך
1234. - מדביקים את פלט ה-JSON מהפקודה
lldbclient.py(שלב 2) בשדה פרמטרים של DAP (JSON).
כדי להתחיל לנפות באגים, לוחצים על ניפוי באגים.
פתרון בעיות
- אם השגיאה
error: Connection shut down by remote side while waiting for reply to initial handshake packetמופיעה, צריך לסיים את סשן הניפוי הנוכחי ולהפעיל מחדש אתlldb-serverבמכשיר ואת מתאם CodeLLDB במארח.