NDK มีสคริปต์เชลล์ชื่อ ndk-gdb
เพื่อเริ่มต้น
เซสชันการแก้ไขข้อบกพร่องดั้งเดิมของบรรทัดคำสั่ง ผู้ใช้ที่ต้องการใช้ GUI ควร
โปรดอ่านเอกสารประกอบสำหรับการแก้ไขข้อบกพร่องใน
Android Studio แทน
ข้อกำหนด
คุณต้องปฏิบัติตามข้อกำหนดต่อไปนี้เพื่อให้การแก้ไขข้อบกพร่องของระบบผ่านบรรทัดคำสั่งทำงานได้
- สร้างแอปโดยใช้สคริปต์
ndk-build
สคริปต์ndk-gdb
ไม่สนับสนุนการใช้เมธอดmake APP=<name>
แบบเดิมในการสร้าง - เปิดใช้การแก้ไขข้อบกพร่องของแอปในไฟล์
AndroidManifest.xml
โดยรวม องค์ประกอบ<application>
ที่ตั้งค่าแอตทริบิวต์android:debuggable
เป็นtrue
- สร้างแอปเพื่อให้ทำงานใน Android 2.2 (Android API ระดับ 8) ขึ้นไป
- แก้ไขข้อบกพร่องในอุปกรณ์หรือโปรแกรมจำลองที่ใช้ Android 2.2 ขึ้นไป
สำหรับจุดประสงค์ในการแก้ไขข้อบกพร่อง เป้าหมาย
ระดับ API ที่คุณประกาศในไฟล์
AndroidManifest.xml
นั้นไม่สำคัญ - พัฒนาแอปของคุณใน Unix Shell ใช้ Cygwin ใน Windows
หรือ
ndk-gdb-py
Python เวอร์ชันทดลอง การใช้งานของคุณ - ใช้ GNU Make 3.81 หรือสูงกว่า
การใช้งาน
หากต้องการเรียกใช้สคริปต์ ndk-gdb
ให้เปลี่ยนไปยังไดเรกทอรีของแอปพลิเคชันหรือไดเรกทอรีใดก็ได้ใน
ได้ เช่น
cd $PROJECT $NDK/ndk-gdb
ตรงนี้ $PROJECT
จะชี้ไปยังไดเรกทอรีรากของโปรเจ็กต์ และ $NDK
จะชี้ไปยังไดเรกทอรีรากของโปรเจ็กต์
เส้นทางการติดตั้ง NDK
เมื่อคุณเรียกใช้ ndk-gdb
ระบบจะกำหนดค่าเซสชันเพื่อค้นหาไฟล์ต้นทาง
และสัญลักษณ์/การแก้ไขข้อบกพร่องของไลบรารีเนทีฟที่สร้างขึ้น เปิด แนบกับ สำเร็จแล้ว
กระบวนการของแอปพลิเคชัน ndk-gdb
จะแสดงชุดข้อความแสดงข้อผิดพลาดจำนวนมาก ซึ่งระบุว่า
ค้นหาไลบรารีระบบต่างๆ ซึ่งเป็นเรื่องปกติ เนื่องจากเครื่องโฮสต์ของคุณไม่มี
สัญลักษณ์/การแก้ไขข้อบกพร่องของไลบรารีเหล่านี้ในอุปกรณ์เป้าหมายของคุณ คุณไม่จำเป็นต้องสนใจ
ข้อความ
จากนั้น ndk-gdb
จะแสดงข้อความแจ้ง GDB ปกติ
คุณโต้ตอบกับ ndk-gdb
ในลักษณะเดียวกับที่ทำกับ GNU GDB ตัวอย่างเช่น คุณสามารถ
ใช้ b <location>
เพื่อตั้งค่าเบรกพอยท์ และใช้ c
(สำหรับ "ต่อไป") เป็น
ดำเนินการต่อ ดูรายการคำสั่งทั้งหมดได้ที่
คู่มือ GDB หากคุณต้องการใช้
โปรแกรมแก้ไขข้อบกพร่อง LLDB ให้ใช้ --lldb
เมื่อเรียกใช้สคริปต์ ndk-gdb
โปรดทราบว่าเมื่อคุณออกจากข้อความแจ้ง GDB กระบวนการของแอปพลิเคชันที่คุณกำลังแก้ไขข้อบกพร่องจะหยุดลง ช่วงเวลานี้ พฤติกรรมเป็นข้อจำกัดของ GDB
ndk-gdb
จัดการกับเงื่อนไขข้อผิดพลาดหลายอย่าง และแสดงข้อความแสดงข้อผิดพลาดที่ให้ข้อมูล
พบปัญหา การตรวจสอบเหล่านี้รวมถึงการตรวจสอบว่าเป็นไปตามเงื่อนไขต่อไปนี้
- ตรวจสอบว่า ADB อยู่ในเส้นทางของคุณ
- ตรวจสอบว่าแอปพลิเคชันได้รับการประกาศว่าสามารถแก้ไขข้อบกพร่องได้ในไฟล์ Manifest
- ตรวจสอบว่าแอปพลิเคชันที่ติดตั้งในอุปกรณ์มีชื่อแพ็กเกจเดียวกันด้วย แก้ไขข้อบกพร่องได้
โดยค่าเริ่มต้น ndk-gdb
จะค้นหากระบวนการของแอปพลิเคชันที่ทำงานอยู่แล้ว และจะแสดง
หากไม่พบ อย่างไรก็ตาม คุณสามารถใช้ --start
หรือ
--launch=<name>
เพื่อเริ่มกิจกรรมของคุณโดยอัตโนมัติก่อนการแก้ไขข้อบกพร่อง
เซสชัน ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือก
ตัวเลือก
หากต้องการดูรายการตัวเลือกทั้งหมด ให้พิมพ์ ndk-gdb --help
ในบรรทัดคำสั่ง ตาราง 1
แสดงหมายเลขของรายการที่ใช้กันโดยทั่วไป พร้อมกับคำอธิบายสั้นๆ
การเริ่ม ndk-gdb
ด้วยตัวเลือกนี้จะเป็นการเปิดกิจกรรมที่เรียกใช้ได้รายการแรกในรายการ
ในไฟล์ Manifest ของแอปพลิเคชัน ใช้ --launch=<name>
เพื่อเริ่มฟีเจอร์การเปิดใช้งานถัดไป
กิจกรรม หากต้องการถ่ายโอนรายการกิจกรรมที่เรียกใช้ได้ ให้เรียกใช้ --launch-list
จากคำสั่ง
บรรทัด
ตัวเลือก | คำอธิบาย> |
---|---|
--lldb |
หากตั้งค่าไว้ สคริปต์จะใช้ดีบักเกอร์ LLDB สำหรับเซสชันแทน gdb |
--verbose |
ตัวเลือกนี้จะทำให้ระบบบิลด์พิมพ์ข้อมูลแบบละเอียดเกี่ยวกับการแก้ไขข้อบกพร่องของระบบ
การตั้งค่าเซสชัน จำเป็นสำหรับการแก้ไขข้อบกพร่องเมื่อโปรแกรมแก้ไขข้อบกพร่องไม่สามารถเชื่อมต่อกับ
และข้อความแสดงข้อผิดพลาดที่ |
--force |
โดยค่าเริ่มต้น ndk-gdb จะล้มเลิกหากพบว่ามีเซสชันการแก้ไขข้อบกพร่องของระบบอื่นอยู่แล้ว
ทำงานบนอุปกรณ์เดียวกัน ตัวเลือกนี้จะหยุดเซสชันอื่นและแทนที่ด้วยเซสชันใหม่
โปรดทราบว่าตัวเลือกนี้ไม่ได้ยุติการแก้ไขข้อบกพร่องของแอปจริง ซึ่งคุณต้องปิด
แยกกัน |
--start |
เมื่อคุณเริ่มต้น |
--launch=<name> |
ตัวเลือกนี้คล้ายกับ |
--launch-list |
ตัวเลือกความสะดวกนี้จะพิมพ์รายการชื่อกิจกรรมที่สามารถเรียกใช้ได้ทั้งหมดที่พบใน
ไฟล์ Manifest ของแอป |
--project=<path> |
ตัวเลือกนี้จะระบุไดเรกทอรีโปรเจ็กต์แอป ซึ่งจะเป็นประโยชน์หากคุณต้องการเปิดตัว สคริปต์โดยไม่ต้องเปลี่ยนเป็นไดเรกทอรีโปรเจ็กต์ก่อน |
--port=<port> |
โดยค่าเริ่มต้น |
--adb=<file> |
ตัวเลือกนี้จะระบุ adb ที่เรียกใช้ได้ จำเป็นต้องดำเนินการก็ต่อเมื่อคุณยังไม่ได้กำหนดเส้นทางเพื่อรวมไฟล์ปฏิบัติการดังกล่าวเท่านั้น |
-d -e -s <serial> |
แฟล็กเหล่านี้คล้ายกับคำสั่ง adb ที่มีชื่อเดียวกัน ตั้งค่าสถานะเหล่านี้หากคุณมี อุปกรณ์หรือโปรแกรมจำลองต่างๆ ที่เชื่อมต่อกับเครื่องโฮสต์ ซึ่งมีความหมายดังนี้
หรือคุณจะกําหนดตัวแปรสภาพแวดล้อม |
--exec=<file> -x <file> |
ตัวเลือกนี้จะบอก |
--nowait |
ปิดใช้การหยุดโค้ด Java ชั่วคราวจนกว่า GDB จะเชื่อมต่อ การส่งผ่านตัวเลือกนี้อาจทำให้โปรแกรมแก้ไขข้อบกพร่อง ที่จะพลาดเบรกพอยท์ก่อนกำหนด |
--tui
-t |
เปิดใช้อินเทอร์เฟซผู้ใช้แบบข้อความ (หากมี) |
--gnumake-flag=<flag> |
ตัวเลือกนี้เป็นแฟล็กเพิ่มเติม (หรือ Flag) ที่จะส่งผ่านไปยัง
|
หมายเหตุ: 3 ตัวเลือกสุดท้ายในตารางนี้สำหรับ
เวอร์ชัน Python ของ ndk-gdb
การรองรับชุดข้อความ
หากแอปทำงานบนแพลตฟอร์มที่เก่ากว่า Android 2.3 (API ระดับ 9) ndk-gdb
ไม่สามารถแก้ไขข้อบกพร่องของชุดข้อความเนทีฟอย่างถูกต้อง โปรแกรมแก้ไขข้อบกพร่องจะแก้ไขข้อบกพร่องของเทรดหลักได้ Abd เท่านั้น
ไม่ประมวลผลเทรดอื่นๆ
หากคุณวางเบรกพอยท์ในฟังก์ชันที่ดำเนินการกับเทรดที่ไม่ใช่เทรดหลัก โปรแกรมจะออกไป และ GDB จะแสดงข้อความต่อไปนี้
Program terminated with signal SIGTRAP, Trace/breakpoint trap. The program no longer exists.