แก้ไขข้อบกพร่องโปรเจ็กต์
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
แก้ไขข้อบกพร่องของการขัดข้องของระบบ
ถ้าคุณไม่ค่อยเข้าใจ
ไฟล์ Dump ข้อขัดข้องดั้งเดิม หรือ Tombstone
การแก้ไขข้อบกพร่องของโค้ดแพลตฟอร์ม Android ที่มาพร้อมเครื่อง
เป็นบทนำที่ดี
สำหรับแคตตาล็อกฉบับเต็มของประเภทข้อขัดข้องที่พบได้ทั่วไปและวิธีตรวจสอบ โปรดไปที่
การวิเคราะห์ข้อขัดข้องของระบบ
เครื่องมือ ndk-stack ช่วยเป็นสัญลักษณ์ของข้อขัดข้องได้
คุณสามารถแก้ไขข้อบกพร่องของข้อขัดข้องใน Android Studio ได้ตามที่อธิบายไว้ใน
เอกสารประกอบเกี่ยวกับแก้ไขข้อบกพร่องของแอป หากคุณต้องการใช้
บรรทัดคำสั่ง ndk-gdb ช่วยให้คุณแนบ gdb
หรือ
lldb
จาก Shell ของคุณ
อนุญาตให้แอปเข้าถึงการติดตาม Tombstone ได้โดยตรง
ตั้งแต่ Android 12 (API ระดับ 31) เป็นต้นไป คุณจะเข้าถึงข้อขัดข้องดั้งเดิมของแอปได้
Tombstone
บัฟเฟอร์โปรโตคอลผ่าน
ApplicationExitInfo.getTraceInputStream()
บัฟเฟอร์โปรโตคอลจะได้รับการทำให้เป็นอนุกรมโดยใช้สคีมานี้
ก่อนหน้านี้ วิธีเดียวที่จะเข้าถึงข้อมูลนี้คือผ่านทาง
Android Debug Bridge (adb)
ต่อไปนี้คือตัวอย่างวิธีนำวิธีนี้ไปใช้ในแอปของคุณ
ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for (ApplicationExitInfo aei: exitReasons) {
if (aei.getReason() == REASON_CRASH_NATIVE) {
// Get the tombstone input stream.
InputStream trace = aei.getTraceInputStream();
// The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
Tombstone tombstone = Tombstone.parseFrom(trace);
}
}
แก้ไขข้อบกพร่องปัญหาเกี่ยวกับหน่วยความจำของระบบ
ตัวล้างที่อยู่ (HWASan/ASan)
HWAddress Sanitizer (HWASan) และ
Address Sanitizer (ASan) นั้นคล้ายกับ Valgrind แต่
เร็วขึ้นและสนับสนุนได้ดีขึ้นมากบน Android
ตัวเลือกเหล่านี้เป็นตัวเลือกที่ดีที่สุดสำหรับการแก้ไขข้อบกพร่องด้านหน่วยความจําใน Android
การแก้ไขข้อบกพร่องของ Malloc
โปรดดู
แก้ไขข้อบกพร่อง Malloc
และ
การติดตามหน่วยความจำของระบบโดยใช้ libc Callback
สำหรับคำอธิบายโดยละเอียดเกี่ยวกับตัวเลือกในตัวของไลบรารี C สำหรับการแก้ไขข้อบกพร่อง
หน่วยความจำของระบบ
ตะขอของ Malloc
หากต้องการสร้างเครื่องมือของคุณเอง libc ของ Android ก็รองรับการสกัดกั้นด้วย
การจัดสรร/การโทรที่ไม่เสียค่าใช้จ่ายทั้งหมดที่เกิดขึ้นระหว่างการดำเนินการโปรแกรม โปรดดู
เอกสารเกี่ยวกับ malloc_hooks
เพื่อดูวิธีการใช้งาน
สถิติ Malloc
Android รองรับ
mallinfo(3)
และ
malloc_info(3)
ส่วนขยายไปยัง <malloc.h>
ฟังก์ชัน malloc_info
พร้อมใช้งานใน Android 6.0 (Marshmallow) และ
สูงกว่า และสคีมา XML ได้รับการบันทึกไว้ในเอกสารของ Bionic
malloc.h
ส่วนหัว
กำลังทำโปรไฟล์
สำหรับการทำโปรไฟล์ CPU ของโค้ดแบบเนทีฟ คุณสามารถใช้ Simpleperf ได้
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[],null,["# Debug your project\n\nDebug native crashes\n--------------------\n\nIf you're struggling to understand a native crash dump or tombstone,\n[Debugging Native Android Platform Code](https://source.android.com/devices/tech/debug/index.html)\nis a good introduction.\n\nFor a fuller catalog of common types of crash and how to investigate them, see\n[Diagnosing Native Crashes](https://source.android.com/devices/tech/debug/native-crash).\n\nThe [ndk-stack](/ndk/guides/ndk-stack) tool can help symbolize your crashes.\nYou can debug crashes in Android Studio as described in the general\n[Debug your app](/studio/debug) documentation. If you prefer to use the\ncommand-line, [ndk-gdb](/ndk/guides/ndk-gdb) lets you attach either `gdb` or\n`lldb` from your shell.\n\n### Provide apps direct access to tombstone traces\n\nStarting in Android 12 (API level 31), you can access your app's native crash\ntombstone as a\n[protocol buffer](https://developers.google.com/protocol-buffers/) through the\n[`ApplicationExitInfo.getTraceInputStream()`](/reference/android/app/ApplicationExitInfo#getTraceInputStream())\nmethod. The protocol buffer is serialized using [this schema](https://android.googlesource.com/platform/system/core/+/refs/heads/main/debuggerd/proto/tombstone.proto).\nPreviously, the only way to get access to this information was through the\n[Android Debug Bridge](/studio/command-line/adb) (adb).\n\nHere's an example of how to implement this in your app: \n\n ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);\n MutableList\u003cApplicationExitInfo\u003e exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);\n for (ApplicationExitInfo aei: exitReasons) {\n if (aei.getReason() == REASON_CRASH_NATIVE) {\n // Get the tombstone input stream.\n InputStream trace = aei.getTraceInputStream();\n // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.\n Tombstone tombstone = Tombstone.parseFrom(trace);\n }\n }\n\nDebug native memory issues\n--------------------------\n\n### Address Sanitizer (HWASan/ASan)\n\n[HWAddress Sanitizer](/ndk/guides/hwasan) (HWASan) and\n[Address Sanitizer](/ndk/guides/asan) (ASan) are similar to Valgrind, but\nsignificantly faster and much better supported on Android.\n\nThese are your best option for debugging memory errors on Android.\n\n### Malloc debug\n\nSee\n[Malloc Debug](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_debug/README.md)\nand\n[Native Memory Tracking using libc Callbacks](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_debug/README_api.md)\nfor a thorough description of the C library's built-in options for debugging\nnative memory issues.\n\n### Malloc hooks\n\nIf you want to build your own tools, Android's libc also supports intercepting\nall allocation/free calls that happen during program execution. See the\n[malloc_hooks documentation](https://android.googlesource.com/platform/bionic/+/main/libc/malloc_hooks/README.md)\nfor usage instructions.\n\n### Malloc statistics\n\nAndroid supports the\n[mallinfo(3)](http://man7.org/linux/man-pages/man3/mallinfo.3.html)\nand\n[malloc_info(3)](http://man7.org/linux/man-pages/man3/malloc_info.3.html)\nextensions to `\u003cmalloc.h\u003e`.\n\nThe `malloc_info` functionality is available in Android 6.0 (Marshmallow) and\nhigher and its XML schema is documented in Bionic's\n[malloc.h](https://android.googlesource.com/platform/bionic/+/main/libc/include/malloc.h)\nheader.\n\nProfiling\n---------\n\nFor CPU profiling of native code, you can use [Simpleperf](/ndk/guides/simpleperf)."]]