Android Studio for Platform (ASfP) ผสานรวมการแก้ไขข้อบกพร่องของแพลตฟอร์มหลายภาษา ไว้ในแท็บแนบในหน้าต่างเครื่องมือแก้ไขข้อบกพร่อง
- เลือกเรียกใช้ > แนบกับกระบวนการ Android (Control+Alt+A) เพื่อแนบ โปรแกรมแก้ไขข้อบกพร่องของ Java, โปรแกรมแก้ไขข้อบกพร่องแบบเนทีฟ (LLDB แบบรวม) หรือทั้ง 2 อย่างกับแอปหรือกระบวนการของระบบที่ กำลังทำงานในอุปกรณ์จริงหรืออุปกรณ์เสมือน Cuttlefish
- ตรวจสอบไลบรารีที่ใช้ร่วมกันที่โหลดแต่ละรายการ (
.so) และ ELF Build ID แบบ 8 อักขระในแผงไลบรารีก่อนที่จะแนบ โดยมีไอคอนเครื่องหมายถูก เพื่อยืนยันสัญลักษณ์การแก้ไขข้อบกพร่องในเครื่องที่ตรงกันภายใต้out/target/product/<device>/symbols - จัดการข้อกำหนดเบื้องต้นของอุปกรณ์จากแถบเครื่องมือโดยกรองด้วยแสดงกระบวนการของระบบ
คลิกอุปกรณ์ที่รูทเพื่อเรียกใช้
adb root(แสดงอุปกรณ์ รูทแล้วเมื่อใช้งานอยู่) และคลิกเปิดใช้ JDWP เพื่อเปิดใช้ JDWP ในบิลด์userdebug - ตั้งค่าจุดพักตามเงื่อนไขและข้อยกเว้น ดูค่าตัวแปรแบบอินไลน์ใน เอดิเตอร์ ใช้ทิ้งเฟรมและก้าวเข้าไปอัจฉริยะ รวมถึงตรวจสอบ ประเภท C++ และ Rust ที่มีโครงสร้างขณะรันไทม์
ก่อนใช้ดีบักเกอร์ ให้สร้างlunchเป้าหมายout/target/product/<device>/symbols/.build-idเพื่อให้มีดัชนีสัญลักษณ์ในเครื่อง และแฟลช
หรือเปิดใช้รูปภาพอุปกรณ์ที่ตรงกัน
การแก้ไขข้อบกพร่องของ Java และการแก้ไขข้อบกพร่องแบบคู่ของ Java และโค้ดเนทีฟ
หากต้องการแก้ไขข้อบกพร่องของแอปพลิเคชัน Java หรือ Kotlin, แอประบบ (เช่น
com.android.messaging, การตั้งค่า หรือ SystemUI) หรือกระบวนการที่เรียกใช้ JNI
และโค้ด C++ หรือ Rust ให้ทำตามขั้นตอนต่อไปนี้
- ตั้งค่าเบรกพอยต์ในไฟล์ต้นฉบับ Java, Kotlin, C, C++ หรือ Rust
- เลือกเรียกใช้ > แนบกับกระบวนการ Android (Control+Alt+A) ASfP จะเปิดแท็บแนบที่ปักหมุดไว้ภายในหน้าต่างเครื่องมือแก้ไขข้อบกพร่อง
- เลือกอุปกรณ์เป้าหมายจากเมนูแบบเลื่อนลงของอุปกรณ์ หากไม่ได้เปิดใช้ JDWP ในบิลด์
userdebugให้คลิกเปิดใช้ JDWP—ASfP จะตั้งค่าpersist.debug.dalvik.vm.jdwp.enabled=1และรีบูตอุปกรณ์ เมื่อ ใช้งานอยู่ ปุ่มจะแสดงเปิดใช้ JDWP แล้วพร้อมการดำเนินการคลิกขวาปิดใช้ JDWP - เลือกกระบวนการเป้าหมายจากตาราง (กระบวนการ Java และ ART จะแสดงไอคอน ถ้วยกาแฟ)
- ที่ด้านล่างของแท็บแนบ ให้เลือกโปรแกรมแก้ไขข้อบกพร่องของ Java, โปรแกรมแก้ไขข้อบกพร่อง
แบบเนทีฟ หรือทั้ง 2 อย่าง การเลือกทั้ง 2 ตัวเลือกจะเปิดแท็บที่ลิงก์ 2 แท็บในหน้าต่างเครื่องมือแก้ไขข้อบกพร่อง
โดย
<process> (<pid>)จะเป็น LLDB ในตัว และ<process> (<pid>)-jdwpจะเป็น Java วงจรของทั้ง 2 เซสชันเชื่อมโยงกัน ดังนั้นการหยุดเซสชันใดเซสชันหนึ่งจะทำให้ทั้ง 2 เซสชันหยุดทำงาน - คลิกแนบและโต้ตอบกับแอปในอุปกรณ์เพื่อเข้าถึง เบรกพอยต์

การแก้ไขข้อบกพร่องของกระบวนการของระบบ (C และ C++) และการยืนยันสัญลักษณ์
หากต้องการแก้ไขข้อบกพร่องของ Daemon ของระบบ, HAL หรือบริการของระบบ (เช่น
android.hardware.bluetooth-service.cuttlefish, surfaceflinger หรือ
audioserver) ให้ทำตามขั้นตอนต่อไปนี้
- เปิดเรียกใช้ > แนบกับกระบวนการ Android (Control+Alt+A) หากแถบเครื่องมือแสดงอุปกรณ์ที่รูท ให้คลิกเพื่อเรียกใช้ ASfP
adb rootและแสดงอุปกรณ์ที่รูทแล้ว - เลือกแสดงกระบวนการของระบบในแถบเครื่องมือด้านบน แล้วกรองกระบวนการเป้าหมาย
- ยืนยันสัญลักษณ์การแก้ไขข้อบกพร่องในเครื่องในแผงไลบรารี: การเลือกกระบวนการจะ
ป้อนข้อมูลลงในตารางไลบรารีด้วยไลบรารีที่ใช้ร่วมกัน ELF ทั้งหมด (
.so) ที่โหลดในกระบวนการและอักขระฐานสิบหก 8 ตัวแรกของBuild ID ของ ELF ASfP จะจับคู่ Build ID แต่ละรายการกับout/target/product/<device>/symbols(ต้องใช้symbols/.build-idเพื่อ แก้ไขไลบรารีภายใน APEX):- ไลบรารีที่ยืนยันแล้วจะแสดงไอคอนเครื่องหมายถูก ชี้ไปที่แถวที่แก้ไขแล้ว
เพื่อดูตัวอย่างเส้นทางสัญลักษณ์
.debugแบบเต็มในเครื่อง - ไลบรารีที่ยังไม่ได้รับการแก้ไขซึ่งไม่มีสัญลักษณ์ในเครื่องที่ตรงกันจะแสดงไอคอนคำเตือน
- ไลบรารีที่ยืนยันแล้วจะแสดงไอคอนเครื่องหมายถูก ชี้ไปที่แถวที่แก้ไขแล้ว
เพื่อดูตัวอย่างเส้นทางสัญลักษณ์
- การตรวจหาโปรเซสที่ไม่ใช่ Java: เมื่อคุณเลือกโปรเซส C++ หรือ Rust
(ทำเครื่องหมายด้วยไอคอนหกเหลี่ยม
C) ASfP จะซ่อนดีบักเกอร์ Java และแสดง การแก้ไขข้อบกพร่องของ Java ไม่พร้อมใช้งาน ไม่ใช่โปรเซส Java ขณะที่เลือกดีบักเกอร์แบบเนทีฟไว้ - ตั้งค่าจุดพักในไฟล์ต้นฉบับ C, C++ หรือ Rust คลิกแนบ แล้ว ทริกเกอร์เส้นทางโค้ดในอุปกรณ์

แก้ไขข้อบกพร่องของโค้ด Rust
ASfP แก้ข้อบกพร่องโค้ดแพลตฟอร์ม Rust ด้วยโปรแกรมแก้ไขข้อบกพร่อง LLDB ในตัวเดียวกันที่ใช้สำหรับ C และ C++ ไม่จำเป็นต้องใช้อะแดปเตอร์ภายนอกหรือการตั้งค่าเซิร์ฟเวอร์ด้วยตนเอง: ASfP ใช้lldb-dap จาก Toolchain ที่รวมไว้และโหลดตัวพิมพ์ที่อ่านง่ายของ Rust จาก AOSP Prebuilt โดยอัตโนมัติเพื่อให้ประเภทมาตรฐาน เช่น String, Vec, HashMap และ Option แสดงค่าที่มีโครงสร้างในบานหน้าต่างตัวแปร
แนบกับกระบวนการ Rust ที่กำลังทำงานในอุปกรณ์
ทำตามขั้นตอนในกระบวนการของระบบ (การแก้ไขข้อบกพร่องของ C และ C++) ดังนี้ เปิดเรียกใช้ > แนบกับกระบวนการ Android ตรวจสอบว่าอุปกรณ์รูทแล้วและสัญลักษณ์ ในเครื่องแสดงเครื่องหมายถูกในแผงไลบรารี เลือกโปรแกรมแก้ไขข้อบกพร่องแบบเนทีฟ ไว้ แล้วคลิกแนบ สแตกเฟรมของ Rust และ C หรือ C++ จะปรากฏร่วมกันในเซสชันการแก้ไขข้อบกพร่องเดียวกัน
แก้ไขข้อบกพร่องของโมดูล rust_test หรือ rust_test_host
- เปิดไฟล์
Android.bpที่ประกาศrust_testหรือrust_test_hostเป้าหมาย แล้วคลิกไอคอนเรียกใช้ในกัตเตอร์ข้างประเภทโมดูล - เลือกแก้ไขข้อบกพร่อง '<ModuleName>' ASfP จะสร้างเป้าหมาย เปิดใช้ไบนารีทดสอบ ภายใต้ LLDB ในเครื่องโฮสต์หรืออุปกรณ์ที่เชื่อมต่อ และหยุดชั่วคราวที่ เบรกพอยต์ Rust
- หากต้องการแก้ไขข้อบกพร่องของฟังก์ชันการทดสอบเดียวหรือปรับแต่งคำสั่งเริ่มต้นของ LLDB ให้เปิด เรียกใช้ > แก้ไขการกำหนดค่า เลือกการกำหนดค่า Soong Test ที่สร้างขึ้น แล้วตั้งค่าเมธอดหรือขยายตัวเลือกดีบักเกอร์ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกการกำหนดค่า Soong Test ได้ที่ ทดสอบโค้ดแพลตฟอร์มด้วย atest
