NDK มีสคริปต์เชลล์ชื่อ ndk-gdb
เพื่อเริ่มเซสชันการแก้ไขข้อบกพร่องแบบเนทีฟของบรรทัดคำสั่ง (เดิมคือ gdb แต่ตอนนี้เป็น lldb)
ผู้ใช้ที่ต้องการใช้ 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 ใน Windows ให้ใช้ Cygwin หรือการใช้งาน
ndk-gdb-py
Python เวอร์ชันทดลอง - ใช้ GNU Make 3.81 ขึ้นไป
การใช้งาน
หากต้องการเรียกใช้สคริปต์ ndk-gdb
ให้เปลี่ยนเป็นไดเรกทอรีแอปพลิเคชันหรือไดเรกทอรีใดก็ได้ที่อยู่ภายใต้ไดเรกทอรีนั้น เช่น
cd $PROJECT $NDK/ndk-gdb
ในที่นี้ $PROJECT
จะชี้ไปยังไดเรกทอรีรูทของโปรเจ็กต์ และ $NDK
จะชี้ไปยังเส้นทางการติดตั้ง NDK
เมื่อเรียกใช้ ndk-gdb
ระบบจะกําหนดค่าเซสชันให้ค้นหาไฟล์ต้นฉบับและสัญลักษณ์/เวอร์ชันแก้ไขข้อบกพร่องของไลบรารีเนทีฟที่สร้างขึ้น เมื่อแนบกับกระบวนการสมัครเรียบร้อยแล้ว ndk-gdb
จะแสดงข้อความแสดงข้อผิดพลาดจำนวนมาก โดยระบุว่าไม่พบคลังระบบต่างๆ กรณีนี้เป็นเรื่องปกติ เนื่องจากเครื่องโฮสต์ไม่มีไลบรารีเหล่านี้ในเวอร์ชันสัญลักษณ์/แก้ไขข้อบกพร่องในอุปกรณ์เป้าหมาย คุณไม่จำเป็นต้องสนใจข้อความเหล่านี้และจะไม่ส่งผลเสียหายใดๆ
จากนั้น ndk-gdb
จะแสดงพรอมต์ lldb ตามปกติ
คุณโต้ตอบกับ ndk-gdb
ได้เช่นเดียวกับที่โต้ตอบกับ lldb
ดู [แผนที่คำสั่ง GDB ไปยัง LLDB](https://lldb.llvm.org/use/map.html) ที่มีประโยชน์หากคุณไม่คุ้นเคยกับ lldb แต่รู้จัก gdb
ndk-gdb
จะจัดการกับเงื่อนไขข้อผิดพลาดหลายรายการ และแสดงข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์หากพบปัญหา การตรวจสอบเหล่านี้รวมถึงการตรวจสอบว่าเงื่อนไขต่อไปนี้เป็นไปตามข้อกำหนดหรือไม่
- ตรวจสอบว่า ADB อยู่ในเส้นทางของคุณ
- ตรวจสอบว่าแอปพลิเคชันของคุณประกาศว่าแก้ไขข้อบกพร่องได้ในไฟล์ Manifest
- ตรวจสอบว่าแอปพลิเคชันที่ติดตั้งซึ่งมีชื่อแพ็กเกจเดียวกันในอุปกรณ์นั้นแก้ไขข้อบกพร่องได้เช่นกัน
โดยค่าเริ่มต้น ndk-gdb
จะค้นหากระบวนการสมัครที่ทำงานอยู่และแสดงข้อผิดพลาดหากไม่พบ อย่างไรก็ตาม คุณสามารถใช้ตัวเลือก --start
หรือ --launch=<name>
เพื่อเริ่มกิจกรรมโดยอัตโนมัติก่อนเซสชันการแก้ไขข้อบกพร่องได้ ดูข้อมูลเพิ่มเติมได้ที่ตัวเลือก
ตัวเลือก
หากต้องการดูรายการตัวเลือกทั้งหมด ให้พิมพ์ ndk-gdb --help
ในบรรทัดคำสั่ง ตารางที่ 1 แสดงรายการที่พบบ่อยพร้อมคําอธิบายสั้นๆ
ตารางที่ 1 ตัวเลือก ndk-gdb ทั่วไปและคําอธิบาย
การเริ่มต้น ndk-gdb
ด้วยตัวเลือกนี้ที่ระบุจะเปิดใช้งานกิจกรรมที่เปิดใช้ได้รายการแรกในไฟล์ Manifest ของแอปพลิเคชัน ใช้ --launch=<name>
เพื่อเริ่มกิจกรรมถัดไปที่เปิดใช้ได้ หากต้องการแสดงรายการกิจกรรมที่เปิดได้ ให้เรียกใช้ --launch-list
จากบรรทัดคำสั่ง
ตัวเลือก | คําอธิบาย> |
---|---|
--verbose |
ตัวเลือกนี้จะบอกให้ระบบบิลด์พิมพ์ข้อมูลแบบละเอียดเกี่ยวกับการตั้งค่าเซสชันการแก้ไขข้อบกพร่องแบบเนทีฟ ไฟล์นี้จำเป็นเฉพาะในกรณีที่ต้องแก้ไขข้อบกพร่องเมื่อโปรแกรมแก้ไขข้อบกพร่องเชื่อมต่อกับแอปไม่ได้ และข้อความแสดงข้อผิดพลาดที่ |
--force |
โดยค่าเริ่มต้น ndk-gdb จะหยุดดำเนินการหากพบว่ามีเซสชันการแก้ไขข้อบกพร่องแบบเนทีฟอื่นทำงานอยู่ในอุปกรณ์เดียวกัน ตัวเลือกนี้จะปิดเซสชันอื่นและแทนที่ด้วยเซสชันใหม่
โปรดทราบว่าตัวเลือกนี้จะไม่หยุดแอปจริงที่กำลังแก้ไขข้อบกพร่อง ซึ่งคุณต้องหยุดแยกต่างหาก |
--start |
เมื่อคุณเริ่ม |
--launch=<name> |
ตัวเลือกนี้คล้ายกับ |
--launch-list |
ตัวเลือกที่สะดวกนี้จะพิมพ์รายการชื่อกิจกรรมที่เปิดใช้ได้ทั้งหมดซึ่งพบในไฟล์ Manifest ของแอป |
--project=<path> |
ตัวเลือกนี้จะระบุไดเรกทอรีโปรเจ็กต์แอป ซึ่งมีประโยชน์หากคุณต้องการเปิดสคริปต์โดยไม่ต้องเปลี่ยนเป็นไดเรกทอรีโปรเจ็กต์ก่อน |
--port=<port> |
โดยค่าเริ่มต้น |
--adb=<file> |
ตัวเลือกนี้จะระบุไฟล์ปฏิบัติการของเครื่องมือ adb คุณจำเป็นต้องระบุเฉพาะในกรณีที่ไม่ได้ตั้งค่าเส้นทางให้รวมไฟล์ปฏิบัติการนั้น |
-d -e -s <serial> |
Flag เหล่านี้คล้ายกับคำสั่ง adb ที่มีชื่อเดียวกัน ตั้งค่า Flag เหล่านี้หากคุณมีอุปกรณ์หรือโปรแกรมจำลองหลายเครื่องที่เชื่อมต่อกับเครื่องโฮสต์ โดยมีความหมายดังนี้
หรือจะกําหนดตัวแปรสภาพแวดล้อม |
--exec=<file> -x <file> |
ตัวเลือกนี้จะบอก |
--nowait |
ปิดใช้การหยุดโค้ด Java ชั่วคราวจนกว่าโปรแกรมแก้ไขข้อบกพร่องจะเชื่อมต่อ การส่งตัวเลือกนี้อาจทําให้โปรแกรมแก้ไขข้อบกพร่องพลาดจุดหยุดพักช่วงต้น |
--tui
-t |
เปิดใช้อินเทอร์เฟซผู้ใช้แบบข้อความ (หากมี) |
--gnumake-flag=<flag> |
ตัวเลือกนี้เป็น Flag (หรือ Flag) เพิ่มเติมที่จะส่งไปยังระบบ |
หมายเหตุ: ตัวเลือก 3 รายการสุดท้ายในตารางนี้มีไว้สำหรับ ndk-gdb
เวอร์ชัน Python เท่านั้น