Android Studio for Platform (ASfP) มีโปรแกรมแก้ไขข้อบกพร่องที่มีประสิทธิภาพซึ่งช่วยให้คุณทำสิ่งต่อไปนี้ได้
- เลือกอุปกรณ์ที่จะใช้แก้ไขข้อบกพร่อง
- ตั้งค่าเบรกพอยต์ในโค้ด Java, Kotlin, C/C++ และ Rust
- ตรวจสอบตัวแปรและประเมินนิพจน์ขณะรันไทม์
ก่อนใช้โปรแกรมแก้ไขข้อบกพร่อง คุณต้องแฟลชบิลด์ไปยังอุปกรณ์หรือโปรแกรมจำลอง
การแก้ไขข้อบกพร่องของกระบวนการแอป (Java/Kotlin)
วิธีแก้ไขข้อบกพร่องในกระบวนการสมัครเข้าร่วมโปรแกรม Java หรือ Kotlin
ตั้งค่าเบรกพอยต์ในโค้ด Java หรือ Kotlin ภายใน ASfP
เลือกเรียกใช้ > แนบดีบักเกอร์กับกระบวนการ Android จากเมนู
ในกล่องโต้ตอบเลือกกระบวนการ ให้ตรวจสอบว่าได้ตั้งค่าประเภทการแก้ไขข้อบกพร่องเป็น Java เท่านั้น
เลือกอุปกรณ์จากรายการ
เลือกกระบวนการสมัครเฉพาะที่คุณต้องการแก้ไขข้อบกพร่อง
คลิกตกลง
โต้ตอบกับแอปพลิเคชันในอุปกรณ์เพื่อเข้าถึงจุดพัก
การแก้ไขข้อบกพร่องของกระบวนการของระบบ (C/C++)
วิธีแก้ไขข้อบกพร่องของกระบวนการของระบบที่เขียนด้วย C หรือ C++
ตรวจสอบว่าคุณมีอุปกรณ์หรือโปรแกรมจำลองที่ทำงานอยู่เพียงเครื่องเดียว
เปิดเทอร์มินัลและเรียกใช้
adb rootจากรูทการชำระเงิน AOSP:bash adb root
ตั้งค่าเบรกพอยต์ในโค้ด C/C++ ภายใน ASfP
เลือกเรียกใช้ > แนบดีบักเกอร์กับกระบวนการ Android จากเมนู
ในกล่องโต้ตอบเลือกกระบวนการ ให้เปลี่ยนประเภทการแก้ไขข้อบกพร่องเป็นเนทีฟ เท่านั้นหรือคู่ (Java + เนทีฟ)
เลือกช่องแสดงกระบวนการทั้งหมดเพื่อดูกระบวนการของระบบ
เลือกอุปกรณ์จากรายการ
เลือกกระบวนการของระบบที่ต้องการแก้ไขข้อบกพร่อง (เช่น
surfaceflingerหรือsystem_server)คลิกตกลง
โต้ตอบกับอุปกรณ์เพื่อเข้าถึงจุดพัก
การแก้ไขข้อบกพร่องของ Rust
ASfP รองรับการแก้ไขข้อบกพร่องของ Rust โดยใช้ Debug Adapter Protocol (DAP) กับ LLDB ส่วนนี้จะอธิบายวิธีตั้งค่า CodeLLDB เป็นเซิร์ฟเวอร์ Debug Adapter และแก้ไขข้อบกพร่องของโค้ด Rust ในโฮสต์และในอุปกรณ์ Android
ตั้งค่า CodeLLDB เป็นเซิร์ฟเวอร์อะแดปเตอร์การแก้ไขข้อบกพร่อง
สร้างการกำหนดค่าการเรียกใช้/การแก้ไขข้อบกพร่องของ Debug Adapter Protocol ใหม่
- เลือกเรียกใช้ > แก้ไขการกำหนดค่าจากเมนู
- คลิกปุ่ม +
- เลือกโปรโตคอลอะแดปเตอร์การแก้ไขข้อบกพร่อง
ในแท็บเซิร์ฟเวอร์ ให้คลิกสร้างเซิร์ฟเวอร์ใหม่
ในกล่องโต้ตอบที่เปิดขึ้นใหม่ ให้คลิกเลือกเทมเพลต แล้วเลือก CodeLLDB จากรายการ
หลังจากเลือกเทมเพลต CodeLLDB แล้ว ระบบจะเพิ่มเซิร์ฟเวอร์ใหม่พร้อมการกำหนดค่าที่กำหนดไว้ล่วงหน้า
- เปิดใช้การติดตามแบบละเอียดโดยเลือกแบบละเอียดในเมนูแบบเลื่อนลงการติดตาม
- เพิ่มตัวแปรสภาพแวดล้อมที่ระบุเส้นทางไปยัง
lldb-serverใน แหล่งที่มาของ 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 ในโฮสต์
- เปิดแท็บการกำหนดค่าในการกำหนดค่าการเรียกใช้/การแก้ไขข้อบกพร่องของโปรโตคอล Debug Adapter
- เลือกเปิดตัวเป็นโหมดแก้ไขข้อบกพร่อง
- อัปเดตไดเรกทอรีการทำงาน แล้วเลือกไฟล์ไบนารีที่ต้องการ แก้ไขข้อบกพร่อง
- คลิก OK เพื่อบันทึกการกำหนดค่า
- เริ่มเซสชันการแก้ไขข้อบกพร่องโดยคลิกไอคอนแก้ไขข้อบกพร่องข้างการกำหนดค่า
เมื่อเรียกใช้เป็นครั้งแรก CodeLLDB จะดาวน์โหลด คุณควรเห็นร่องรอย DAP ในคอนโซล เบรกพอยท์ที่ตั้งไว้ในโค้ด Rust ควรจะทำงานตามที่คาดไว้
แก้ไขข้อบกพร่องของไบนารี Rust ในอุปกรณ์ Android (โหมดแนบ)
ค้นหา PID: ระบุรหัสกระบวนการ (PID) ของแอปพลิเคชันที่คุณต้องการ แก้ไขข้อบกพร่องในอุปกรณ์ Android
เริ่ม lldb-server ในอุปกรณ์: จากรูทของแผนผังแหล่งที่มาของ Android ให้เรียกใช้สคริปต์
lldbclient.pyโดยแทนที่<PID>ด้วยรหัสกระบวนการlldbclient.py --setup-forwarding vscode-lldb -p <PID>สคริปต์นี้จะส่ง
lldb-serverที่ถูกต้องไปยังอุปกรณ์ เริ่มต้นlldb-serverตั้งค่าการส่งต่อพอร์ต (พอร์ตโฮสต์ 5039 ไปยังอุปกรณ์) และแสดงผลการกำหนดค่า DAP JSON ที่จำเป็นสำหรับขั้นตอนถัดไป เปิดเทอร์มินัลนี้ไว้เริ่มตัวดัดแปลงการแก้ไขข้อบกพร่อง CodeLLDB ในโฮสต์
- ไปที่ไดเรกทอรีส่วนขยาย 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
- เลือกแท็บการกำหนดค่า
- ตั้งค่าโหมดแก้ไขข้อบกพร่องเป็นแนบ
- ตั้งค่าที่อยู่เป็น
localhost - ตั้งค่าพอร์ตเป็น
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 ในโฮสต์