รายละเอียดหน้านี้ใช้ LLDB หรือ GDB สำหรับการพัฒนาระบบปฏิบัติการ สำหรับการพัฒนาแอพพลิเคดู ตรวจแก้จุดบกพร่องของแอป แทนซึ่งอธิบายถึงวิธีการใช้ Android สตูดิโอ GUI (ขึ้นอยู่กับ LLDB)
GDB เลิกใช้แล้วและจะถูกลบออกในไม่ช้า หากคุณกำลังเปลี่ยนจาก GDB จะ LLDB คุณอาจจะเริ่มต้นด้วยการอ่าน LLDB กวดวิชา หากคุณเป็นผู้ใช้ผู้เชี่ยวชาญ GDB ที่ GDB จะ LLDB แผนที่คำสั่ง จะมีประโยชน์มากในขณะที่การเปลี่ยน
ข้อกำหนดเบื้องต้น
ในการใช้ดีบักเกอร์:
- ตั้งค่าการสร้างสภาพแวดล้อมที่มีปกติ
envsetup.sh
คำสั่ง - เรียกเดียวกัน
lunch
คำสั่งที่คุณใช้เมื่อมีการสร้าง
สำหรับความช่วยเหลือเพิ่มเติมกับการตั้งค่าสภาพแวดล้อมของคุณให้ดูที่การ ตั้งค่าสภาพแวดล้อม
การดีบักแอปหรือกระบวนการที่ทำงานอยู่
เพื่อเชื่อมต่อกับ app ทำงานหรือภูตพื้นเมืองใช้ gdbclient.py
กับ PID ตัวอย่างเช่น ในการดีบักกระบวนการด้วย PID 1234 ให้รันสิ่งนี้บนโฮสต์:
gdbclient.py -p 1234
สคริปต์ตั้งค่าการส่งต่อพอร์ต เริ่มต้นต้นขั้วดีบักระยะไกลที่เหมาะสมบนอุปกรณ์ เริ่มดีบักเกอร์บนโฮสต์ กำหนดค่าให้ค้นหาสัญลักษณ์ และเชื่อมต่อกับต้นขั้วดีบักระยะไกล
การดีบักการเริ่มต้นกระบวนการดั้งเดิม
การแก้ปัญหากระบวนการที่มันเริ่มใช้ gdbclient.py
กับ -r
ตัวเลือก ตัวอย่างเช่นในการแก้ปัญหา ls /bin
, ทำงานนี้ในพื้นที่:
gdbclient.py -r /system/bin/ls /bin
จากนั้นป้อน continue
ที่บั๊กของพรอมต์
การดีบักการเริ่มต้นแอป
บางครั้งคุณต้องการที่จะแก้ปัญหาแอปที่มันเริ่มเช่นเมื่อมีความผิดพลาดและคุณต้องการขั้นตอนผ่านรหัสเพื่อดูสิ่งที่เกิดขึ้นก่อนที่จะตก ติด งานในบางกรณี แต่ในกรณีอื่น ๆ ที่เป็นไปไม่ได้เพราะแอปล้มเหลวก่อนที่คุณจะสามารถแนบ logwrapper
วิธี (ใช้สำหรับ strace
) ไม่ทำงานเสมอเพราะ app อาจจะไม่ได้รับอนุญาตให้เปิดพอร์ตและ gdbserver
สืบทอดว่าข้อ จำกัด
ในการดีบักการเริ่มต้นแอป ให้ใช้ตัวเลือกนักพัฒนาในการตั้งค่าเพื่อสั่งให้แอปรอให้ดีบักเกอร์ Java แนบ:
- ไปที่การตั้งค่า> ตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์> เลือกแอปการแก้ปัญหาและเลือกแอปจากรายการแล้วคลิกรอดีบัก
- เริ่มต้นการตรวจทั้งจากตัวหรือโดยใช้บรรทัดคำสั่งเพื่อใช้งาน:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- รอให้แอปโหลดและกล่องโต้ตอบปรากฏขึ้นเพื่อแจ้งให้คุณทราบว่าแอปกำลังรอดีบักเกอร์
- แนบ
gdbserver
/gdbclient
ปกติชุดจุดพักแล้วดำเนินการต่อกระบวนการ
หากต้องการให้แอปทำงาน ให้แนบดีบักเกอร์ 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 แสดงวิธีการเชื่อมต่อการดีบักเกอร์กับกระบวนการล้มเหลว
การดีบักโดยไม่มีสัญลักษณ์
สำหรับ ARM 32 บิตถ้าคุณไม่ได้มีสัญลักษณ์ gdb
ไม่สามารถตรวจสอบว่าชุดการเรียนการสอนก็แยกส่วน (ARM หรือ Thumb) ในการระบุชุดคำสั่งที่เลือกเป็นค่าเริ่มต้นเมื่อข้อมูลสัญลักษณ์หายไป ให้ตั้งค่าคุณสมบัติต่อไปนี้:
set arm fallback-mode arm # or thumb
การดีบักด้วย VS Code
LLDB สนับสนุนการแก้จุดบกพร่องรหัสแพลตฟอร์ม Visual Studio รหัส คุณสามารถใช้ส่วนหน้าของดีบักเกอร์ VS Code แทนอินเทอร์เฟซ LLDB CLI เพื่อควบคุมและดีบักโค้ดเนทีฟที่ทำงานบนอุปกรณ์
ก่อนที่จะใช้รหัส VS สำหรับการดีบักติดตั้ง ส่วนขยาย CodeLLDB
ในการดีบักโค้ดโดยใช้ VS Code:
- ตรวจสอบให้แน่ใจว่าทุกการสร้างสิ่งประดิษฐ์ (เช่นสัญลักษณ์) ที่จำเป็นในการทำงาน
gdbclient.py
หรือlldbclient.py
ที่มีอยู่ - เรียกใช้คำสั่งต่อไปนี้:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
นี้จะพิมพ์วัตถุ JSON และ
lldbclient.py
ยังคงทำงาน เป็นที่คาดหวัง; ไม่ฆ่าlldbclient.py
โปรแกรม-r
ธงจะต้องเป็นธงสุดท้ายถ้ามันเป็นปัจจุบันเนื่องจากวิธีการธงมีการแยกวิเคราะห์โดยเครื่องมือ - ในการแก้จุดบกพร่องแท็บใน VS รหัสเลือกการกำหนดค่าเพิ่มจากนั้นเลือก LLDB: เปิดตัวที่กำหนดเอง นี้จะเปิด
launch.json
ไฟล์และเพิ่มวัตถุ JSON ใหม่ในรายการ - ลบการกำหนดค่าดีบักเกอร์ที่เพิ่มใหม่
- คัดลอกวัตถุ JSON พิมพ์โดย
lldbclient.py
และวางลงในวัตถุที่คุณเพิ่งลบ บันทึกการเปลี่ยนแปลง - เพื่อโหลดหน้าต่างเพื่อรีเฟรชรายการดีบักกด Ctrl + Shift + P และชนิด
reload window
- เลือกการกำหนดค่าการดีบักใหม่และกดการทำงาน ดีบักเกอร์ควรเชื่อมต่อหลังจาก 10 ถึง 30 วินาที
- เมื่อคุณแก้จุดบกพร่องทำกำลังให้ไปทำงานที่สถานี
lldbclient.py
และกด Enter เพื่อจบlldbclient.py
โปรแกรม