Android Studio for Platform (ASfP) משלב ניפוי באגים בפלטפורמה בכמה שפות בכרטיסייה Attach בחלון הכלים Debug:
- בוחרים באפשרות Run > Attach to Android Process (Control+Alt+A) כדי לצרף את Java debugger, Native debugger (חבילת LLDB) או את שניהם לכל אפליקציה או תהליך מערכת שפועלים במכשיר פיזי או במכשיר וירטואלי של Cuttlefish.
- לפני שמצרפים ספרייה משותפת, צריך לבדוק כל ספרייה משותפת שנטענה (
.so) ואת מזהה הבנייה שלה בפורמט ELF עם שמונה תווים בחלונית Libraries. סמני וי מאמתים את התאמת סמלי הניפוי באגים המקומיים בקטעout/target/product/<device>/symbols. - אפשר לנהל את הדרישות המוקדמות של המכשיר מסרגל הכלים: מסננים באמצעות הצגת תהליכי המערכת, לוחצים על מכשיר עם הרשאות בסיס כדי להפעיל את
adb root(מוצג למכשיר יש הרשאות בסיס כשהאפשרות פעילה) ולוחצים על הפעלת JDWP כדי להפעיל את JDWP בגרסאות build שלuserdebug. - אפשר להגדיר נקודות עצירה מותנות ונקודות עצירה של חריגים, להציג ערכי משתנים מוטבעים בעורך, להשתמש בהורדת פריימים ובכניסה חכמה, ולבדוק סוגים מובנים של C++ ו-Rust בזמן ריצה.
לפני שמשתמשים בכלי לניפוי באגים, צריך ליצור את יעד lunch כדי שמדד הסמלים המקומי out/target/product/<device>/symbols/.build-id יתקיים, ולהפעיל או להציג תמונה תואמת של המכשיר.
ניפוי באגים ב-Java ובנייטיב
כדי לנפות באגים באפליקציית Java או Kotlin, באפליקציית מערכת (כמו com.android.messaging, Settings או SystemUI) או בתהליך שקורא לקוד JNI ו-C++ או Rust, מבצעים את השלבים הבאים:
- מגדירים נקודות עצירה בקובצי המקור של Java, Kotlin, C, C++ או Rust.
- בוחרים באפשרות הפעלה > צירוף לתהליך Android (Control+Alt+A). ASfP פותח כרטיסייה מוצמדת של צירוף בתוך חלון הכלי ניפוי באגים.
- בוחרים את מכשיר היעד מהתפריט הנפתח של המכשירים. אם JDWP לא מופעל בגרסת
userdebug, לוחצים על Enable JDWP (הפעלת JDWP) – ASfP מגדיר אתpersist.debug.dalvik.vm.jdwp.enabled=1ומפעיל מחדש את המכשיר. כשהלחצן פעיל, מוצג בו הכיתוב JDWP enabled (הפעלת JDWP), ובלחיצה ימנית עליו מוצגת הפעולה Disable JDWP (השבתת JDWP). - בוחרים את תהליך היעד מהטבלה (תהליכי Java ו-ART מוצגים עם סמל של ספל קפה).
- בתחתית הכרטיסייה Attach, בוחרים באפשרות Java debugger, Native
debugger או בשתיהן. אם בוחרים את שתי האפשרויות, נפתחות שתי כרטיסיות מקושרות בחלון הכלים Debug (ניפוי באגים):
<process> (<pid>)ל-LLDB המובנה ו-<process> (<pid>)-jdwpל-Java. מחזור החיים שלהם קשור זה לזה, כך שהפסקת אחד מהסשנים תגרום להפסקת שניהם. - לוחצים על Attach (צירוף) ומשתמשים באפליקציה במכשיר כדי להגיע לנקודות העצירה.

ניפוי באגים בתהליך המערכת (C ו-C++) ואימות סמלים
כדי לנפות באגים בשדים של המערכת, ב-HAL או בשירותי המערכת (כמו android.hardware.bluetooth-service.cuttlefish, surfaceflinger או audioserver), מבצעים את השלבים הבאים:
- פותחים את Run > Attach to Android Process (הפעלה > צירוף לתהליך Android) (Control+Alt+A). אם בסרגל הכלים מופיעה האפשרות Root Device, לוחצים עליה כדי להפעיל את ASfP
adb rootולהציג את ההודעה Device is rooted. - בוחרים באפשרות הצגת תהליכי מערכת בסרגל הכלים העליון ומסננים את תהליך היעד.
- אימות סמלי ניפוי הבאגים המקומיים בחלונית Libraries: בחירת תהליך מאכלסת את הטבלה Libraries בכל ספרייה משותפת של ELF (
.so) שנטענה בתהליך, ובשמונת התווים ההקסדצימליים הראשונים של מזהה הבנייה של ה-ELF. ASfP משווה כל מזהה Build ל-out/target/product/<device>/symbols(נדרשsymbols/.build-idכדי לפתור ספריות בתוך קובצי APEX):- סמל וי מוצג בספריות מאומתות. מציבים את הסמן על שורה כלשהי שנפתרה כדי לראות תצוגה מקדימה של הנתיב המלא של סמל המטבע המקומי
.debug. - ספריות לא פתורות ללא סמלים מקומיים תואמים מציגות סמל אזהרה.
- סמל וי מוצג בספריות מאומתות. מציבים את הסמן על שורה כלשהי שנפתרה כדי לראות תצוגה מקדימה של הנתיב המלא של סמל המטבע המקומי
- זיהוי תהליכים שאינם Java: כשבוחרים תהליך C++ או Rust (מסומן בסמל משושה
C), ASfP מסתיר את Java debugger ומציג את ההודעה Java debugging unavailable, not a Java process. תוך שמירה על הסימון של Native debugger. - מגדירים נקודות עצירה בקובצי המקור של C, C++ או Rust, לוחצים על Attach ומפעילים את נתיב הקוד במכשיר.

ניפוי באגים בקוד Rust
ב-ASfP אפשר לנפות באגים בקוד של פלטפורמת Rust באמצעות אותו מנפה באגים מובנה של LLDB שמשמש ל-C ול-C++. לא נדרש מתאם חיצוני או הגדרה ידנית של שרת: ASfP משתמש ב-lldb-dap משרשרת הכלים שכלולה בחבילה, וטוען באופן אוטומטי את מדפיסי ה-Rust היפים מהקובץ AOSP prebuilts, כך שסוגים סטנדרטיים כמו String, Vec, HashMap ו-Option מציגים ערכים מובנים בחלונית Variables.
צירוף לתהליך Rust שפועל במכשיר
פועלים לפי השלבים במאמר בנושא ניפוי באגים בתהליך המערכת (C ו-C++): פותחים את Run > Attach to Android Process, מוודאים שמופיע סימן וי ליד Device is rooted וליד הסמלים המקומיים בחלונית Libraries, משאירים את האפשרות Native debugger מסומנת ולוחצים על Attach. מסגרות סטאק ב-Rust וב-C או C++ מופיעות יחד באותו סשן ניפוי באגים.
ניפוי באגים במודול rust_test או rust_test_host
- פותחים את קובץ
Android.bpשבו מוגדרrust_testאוrust_test_hostיעד, ולוחצים על סמל ההפעלה בשוליים לצד סוג המודול. - בוחרים באפשרות Debug '<ModuleName>'. ASfP יוצר את היעד, מפעיל את קובץ הבדיקה הבינארי ב-LLDB במחשב המארח או במכשיר המחובר, ומשהה את הפעולה בנקודות העצירה של Rust.
- כדי לנפות באגים בפונקציית בדיקה יחידה או להתאים אישית את פקודות ההפעלה של LLDB, פותחים את הפעלה > עריכת הגדרות, בוחרים את ההגדרה שנוצרה Soong Test ומגדירים את Method או מרחיבים את האפשרויות של Debugger. מידע נוסף על אפשרויות ההגדרה של Soong Test זמין במאמר בדיקת קוד של פלטפורמת בדיקה באמצעות atest.
