การรายงานข้อขัดข้องในการพัฒนามือถือ — คืออะไร บริการ และการตั้งค่า

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-05-27 เวลาอ่าน: 8 นาที

การรายงานข้อขัดข้องคือระบบสำหรับรวบรวม ประมวลผล และวิเคราะห์ข้อมูลเกี่ยวกับการขัดข้องของแอปมือถือ ช่วยให้นักพัฒนาสามารถตรวจพบและแก้ไขข้อผิดพลาดในสภาพแวดล้อมการทำงานจริง ตามข้อมูลจาก Google Firebase, 2024 การนำระบบรายงานข้อขัดข้องมาใช้ช่วยลดเวลาในการวินิจฉัยปัญหาจาก ชั่วโมงเป็นนาที และเพิ่มความเสถียรของรุ่นที่เผยแพร่ได้ 35–50% หากไม่มีระบบดังกล่าว นักพัฒนาจะทราบเกี่ยวกับข้อขัดข้องจากรีวิวของผู้ใช้เท่านั้น

ประเด็นสำคัญ

  • การรายงานข้อขัดข้อง — การรวบรวมข้อมูลข้อขัดข้องของแอปโดยอัตโนมัติพร้อมบริบทสภาพแวดล้อมและสแต็กการเรียก
  • Firebase Crashlytics — บริการรายงานข้อขัดข้องที่ได้รับความนิยมมากที่สุด ฟรี และรวมเข้ากับระบบนิเวศของ Google
  • Sentry — แพลตฟอร์มโอเพนซอร์สที่มีความสามารถในการวิเคราะห์ขั้นสูงและรองรับภาษาโปรแกรมมากกว่า 80 ภาษา
  • สแต็กการเรียก — รายงานข้อขัดข้องแต่ละรายการมีสแต็กการเรียกที่สมบูรณ์พร้อมหมายเลขบรรทัดและชื่อเมธอด
  • รายงานที่ไม่ร้ายแรง — นอกจากการขัดข้อง ระบบยังบันทึกข้อยกเว้นที่ถูกจัดการแล้ว ทำให้เห็นภาพรวมของข้อผิดพลาดในแอป

การรายงานข้อขัดข้องคืออะไร

การรายงานข้อขัดข้อง คือกระบวนการรวบรวมข้อมูลทางเทคนิคเกี่ยวกับการขัดข้องของแอปโดยอัตโนมัติและส่งไปยังเซิร์ฟเวอร์แบบรวมศูนย์เพื่อวิเคราะห์ ต่างจากการบันทึก日志 การรายงานข้อขัดข้องจะบันทึกเฉพาะสถานการณ์ฉุกเฉิน — ช่วงเวลาที่แอปถูกบังคับให้ปิดโดยระบบหรือระบบปฏิบัติการ

รายงานข้อขัดข้องแต่ละรายการประกอบด้วย สามองค์ประกอบหลัก: ชนิดของข้อยกเว้น (NullPointerException, SIGSEGV, NSInternalInconsistencyException), สแต็กการเรียกที่สมบูรณ์พร้อมหมายเลขบรรทัด และข้อมูลสภาพแวดล้อม — เวอร์ชันระบบปฏิบัติการ, รุ่นอุปกรณ์, ขนาดหน่วยความจำว่าง ตามข้อมูลจาก Sentry Engineering, 2024 การรวมกันของสามองค์ประกอบนี้ช่วยให้สามารถจำลองและแก้ไขข้อผิดพลาดร้ายแรงได้ 85%

ระบบรายงานข้อขัดข้องสมัยใหม่ขยายฟังก์ชันการทำงานเกินกว่าการขัดข้องทั่วไป Firebase Crashlytics จัดกลุ่มการขัดข้องที่เกิดขึ้นซ้ำเป็น issue โดยอัตโนมัติ Sentry ติดตามการถดถอยระหว่างรุ่นที่เผยแพร่ และ Bugsnag แสดงเส้นทางของผู้ใช้ไปยังข้อผิดพลาด ทั้งสามบริการรองรับ iOS, Android, React Native และ Flutter

ตามข้อมูลจาก Google I/O 2024 แอปที่ไม่มีการรายงานข้อขัดข้องใช้เวลาเฉลี่ย 3–5 วันทำการ ในการวินิจฉัยข้อผิดพลาดร้ายแรงหนึ่งครั้ง ในขณะที่ใช้ Crashlytics ใช้เวลา 15–30 นาที การประหยัดเวลาเกิน 90% สำหรับแต่ละเหตุการณ์

ระบบรวบรวมรายงานข้อขัดข้องทำงานอย่างไร

สถาปัตยกรรม ของระบบรายงานข้อขัดข้องประกอบด้วยสามชั้น: SDK ไคลเอ็นต์ที่ติดตั้งในแอป, API เซิร์ฟเวอร์สำหรับรับและประมวลผลรายงาน และแดชบอร์ดเว็บสำหรับวิเคราะห์ SDK ไคลเอ็นต์สกัดกั้นข้อยกเว้นที่ไม่ถูกจัดการ ทำให้เป็นอนุกรมเป็น JSON และส่งไปยังเซิร์ฟเวอร์เมื่อเปิดแอปครั้งถัดไป

การส่งรายงานข้อขัดข้องเกิดขึ้น แบบอะซิงโครนัสหลังจากรีสตาร์ท แอป นี่คือจุดสำคัญ: ในขณะที่เกิดข้อขัดข้อง แอปไม่สามารถรับประกันการส่งข้อมูลผ่านเครือข่ายที่สำเร็จได้ SDK เขียนรายงานลงในที่เก็บข้อมูลในเครื่อง และเมื่อเปิดครั้งถัดไปจะส่งผ่านเธรดพื้นหลัง ตามข้อมูลจาก Firebase Engineering, 2024 วิธีการนี้ช่วยให้มั่นใจได้ว่าส่งรายงานข้อขัดข้องได้ 99.7%

สำหรับข้อยกเว้นที่ไม่ร้ายแรง (ข้อยกเว้นที่ถูกจัดการภายใน try-catch) SDK จะส่งรายงาน ทันที เนื่องจากแอปยังคงทำงาน รายงานที่ไม่ร้ายแรงมีข้อมูลเดียวกันกับการขัดข้องแต่ไม่ขัดจังหวะเซสชันของผู้ใช้ ซึ่งมีประโยชน์อย่างยิ่งสำหรับการติดตามข้อผิดพลาดของคำขอ API การตรวจสอบความถูกต้องของข้อมูล และตรรกะทางธุรกิจ

การจัดกลุ่มข้อขัดข้อง — อัลกอริทึมของเซิร์ฟเวอร์ที่รวมการขัดข้องที่เหมือนกันตามแฮชของ 5–10 เฟรมสแต็กสุดท้าย ช่วยให้นักพัฒนาเห็นไม่ใช่รายงาน 1000 รายการแยกกัน แต่เป็น issue เดียวที่มี 1,000 เหตุการณ์บนอุปกรณ์และเวอร์ชันระบบปฏิบัติการต่างๆ

Firebase Crashlytics: การรวมและความสามารถ

Firebase Crashlytics เป็นบริการรายงานข้อขัดข้องที่ได้รับความนิยมมากที่สุดสำหรับแอปมือถือ ใช้ใน มากกว่า 3 ล้านโปรเจกต์ ทั่วโลก แผนฟรีรวมถึงรายงานไม่จำกัด การรวมกับ Google Analytics และการจัดกลุ่มข้อขัดข้องอัตโนมัติ

การรวม Crashlytics บน Android

การตั้งค่า Crashlytics บน Android น้อยมาก: เพิ่ม dependency ใน build.gradle และเริ่มต้น SDK ใน Application.onCreate Crashlytics จะตั้งค่า Thread.setDefaultUncaughtExceptionHandler ของตัวเองโดยอัตโนมัติ สกัดกั้นข้อยกเว้นที่ไม่ถูกจัดการทั้งหมด

kotlin
// build.gradle.kts
id("com.google.firebase.crashlytics") version "3.0.2"

// Application.kt
class App : Application() {
    override fun onCreate() {
        super.onCreate()
        FirebaseCrashlytics.getInstance()
            .setCustomKey("environment", "production")
    }

    fun logNonFatal(error: Throwable) {
        FirebaseCrashlytics.getInstance()
            .recordException(error)
    }
}

ความสามารถหลัก ของ Crashlytics — คีย์และบันทึกแบบกำหนดเอง นักพัฒนาสามารถเพิ่มได้สูงสุด 64 คู่คีย์-ค่า ลงในรายงานข้อขัดข้องแต่ละรายการ: สถานะหน้าจอ, แผนที่เลือก, ระดับผู้ใช้ ข้อความบันทึกแบบกำหนดเองยังพร้อมใช้งาน ซึ่งปรากฏในรายงานตามลำดับเวลา

Velocity Alert — การตรวจจับการถดถอยอัตโนมัติ

Velocity Alert คือคุณลักษณะของ Crashlytics ที่ตรวจสอบการเพิ่มขึ้นอย่างรวดเร็วของจำนวนข้อขัดข้องสำหรับ issue เฉพาะ หากหลังจากรุ่นใหม่ที่เผยแพร่ จำนวนการขัดข้องเกินเกณฑ์ที่กำหนด ทีมจะได้รับ การแจ้งเตือนแบบพุช และอีเมล 5–15 นาทีก่อนที่ผู้ใช้จะร้องเรียนเป็นจำนวนมาก

การตั้งค่าเกณฑ์การทำงาน: 2x ใน 1 ชั่วโมง สำหรับ issue ที่ร้ายแรง ตามข้อมูลจาก Google, 2024 ทีมที่เปิดใช้ Velocity Alert เผยแพร่รุ่นแก้ไขด่วนได้เร็วกว่าเฉลี่ย 40% เมื่อเทียบกับทีมที่พึ่งพาการตรวจสอบแดชบอร์ดด้วยตนเอง

การรวม Crashlytics บน iOS

บน iOS SDK ของ Crashlytics ถูกรวมผ่าน CocoaPods หรือ Swift Package Manager SDK สกัดกั้นทั้งข้อยกเว้น Objective-C (ผ่าน NSSetUncaughtExceptionHandler) และสัญญาณระบบปฏิบัติการ (SIGSEGV, SIGABRT) ผ่านตัวจัดการข้อยกเว้น mach ของตัวเอง

ตามข้อมูลจาก Apple Developer, 2024 Crashlytics สำหรับ iOS จัดการข้อขัดข้องได้ถึง 98% ของทุกประเภท รวมถึงข้อผิดพลาดหน่วยความจำระดับต่ำที่ไม่ถูกตรวจพบโดยเครื่องมือมาตรฐาน ทำให้ Crashlytics เป็นมาตรฐานโดยพฤตินัยสำหรับการพัฒนา iOS

Sentry และ Bugsnag: แพลตฟอร์มทางเลือก

Sentry คือแพลตฟอร์มตรวจสอบข้อผิดพลาดแบบโอเพนซอร์สที่รองรับ มากกว่า 80 ภาษาและเฟรมเวิร์ก ต่างจาก Crashlytics Sentry มุ่งเป้าไปที่นักพัฒนาแบ็กเอนด์แต่ให้ SDK ที่มีคุณสมบัติครบถ้วนสำหรับ iOS, Android, React Native และ Flutter

ข้อได้เปรียบหลักของ Sentry คือ การตรวจสอบประสิทธิภาพ ในแดชบอร์ดเดียว นักพัฒนาไม่เพียงเห็นข้อขัดข้อง แต่ยังเห็นธุรกรรมที่นำไปสู่ข้อขัดข้องเหล่านั้น: คำขอเครือข่ายช้า, UI ค้าง, การดำเนินการฐานข้อมูลที่ยาวนาน ตามข้อมูลจาก Sentry, 2024 40% ของข้อขัดข้องมีปัญหาประสิทธิภาพก่อนหน้าที่จะไม่มีใครสังเกตเห็นหากไม่มีวิธีการนี้

Bugsnag แตกต่างในวิธีการจัดกลุ่มข้อผิดพลาด — แทนที่จะใช้สแต็กการเรียก มันวิเคราะห์ เส้นทางของผู้ใช้ รายงานข้อขัดข้องแต่ละรายการมีลำดับของหน้าจอและการกระทำของผู้ใช้ที่นำไปสู่ข้อผิดพลาด ซึ่งมีประโยชน์อย่างยิ่งสำหรับกระบวนการทางธุรกิจที่ซับซ้อน: การสั่งซื้อ, การลงทะเบียน, การชำระเงิน

ค่าใช้จ่ายของบริการแตกต่างกัน: Crashlytics ฟรีภายใน Firebase, Sentry เสนอแผนฟรีสำหรับ 5,000 เหตุการณ์ต่อเดือน, Bugsnag เริ่มต้นที่ $29 ต่อเดือน ทั้งสามแพลตฟอร์มให้ SDK แบบโอเพนซอร์ส การเลือกบริการขึ้นอยู่กับขนาดทีม งบประมาณ และข้อกำหนดด้านความปลอดภัยของข้อมูล

การรายงานข้อขัดข้องบน iOS: คุณลักษณะและ NSException

ลักษณะเฉพาะของ iOS — สถาปัตยกรรมการจัดการข้อผิดพลาดแบบหลายชั้น SDK การรายงานข้อขัดข้องต้องสกัดกั้นข้อยกเว้น Objective-C (NSException), ข้อผิดพลาด Swift (Error), สัญญาณ POSIX (SIGSEGV, SIGBUS) และข้อยกเว้น mach แต่ละประเภทต้องใช้กลไกการสกัดกั้นแยกต่างหาก

NSException เป็นประเภทที่ง่ายที่สุดในการสกัดกั้นผ่าน NSSetUncaughtExceptionHandler อย่างไรก็ตาม ตามข้อมูลจาก Apple, 2024 มีเพียง 30% ของข้อขัดข้องในแอป Swift สมัยใหม่ที่เป็น NSException ส่วนที่เหลืออีก 70% เป็นสัญญาณระบบปฏิบัติการและข้อผิดพลาดรันไทม์ของ Swift ซึ่งต้องการกลไก ตัวจัดการข้อยกเว้น mach

นักพัฒนา iOS ควรทดสอบการรายงานข้อขัดข้องผ่าน การสร้างข้อขัดข้องในเครื่อง ประเภทต่างๆ: __builtin_trap() สำหรับสัญญาณ, [NSException raise:...] สำหรับข้อยกเว้น, fatalError() สำหรับ Swift นี่เป็นวิธีเดียวที่จะมั่นใจได้ว่า SDK ครอบคลุมข้อขัดข้องทุกประเภท

การรายงานข้อขัดข้องบน Android: ANR และการขัดข้องแบบเนทีฟ

Android เพิ่มการขัดข้องสองประเภทที่ไม่มีใน iOS: ANR (แอปไม่ตอบสนอง) และ การขัดข้องแบบเนทีฟ ในโค้ด C/C++ ANR เกิดขึ้นเมื่อเธรด UI ถูกบล็อกนานกว่า 5 วินาที — ระบบแสดงไดอะล็อก "แอปไม่ตอบสนอง" และแนะนำให้ปิด

Thread.setDefaultUncaughtExceptionHandler มาตรฐานไม่สกัดกั้น ANR เนื่องจากไม่ใช่ข้อยกเว้น แต่เป็นสัญญาณจาก ActivityManager ในการติดตาม ANR Crashlytics และ Sentry ใช้ เธรด watchdog พื้นหลัง ที่ตรวจสอบการตอบสนองของเธรด UI ทุก 5 วินาที ตามข้อมูลจาก Firebase, 2024 15% ของปัญหาทั้งหมดบน Android คือ ANR ไม่ใช่การขัดข้อง

การขัดข้องแบบเนทีฟ บน Android เกิดขึ้นในโค้ด C/C++ ที่ทำงานผ่าน JNI (Java Native Interface) การขัดข้องเหล่านี้ไม่ใช่ข้อยกเว้น Java และไม่ถูกสกัดกั้นโดย Thread.setDefaultUncaughtExceptionHandler ในการจัดการจะใช้ Google Breakpad หรือ Crashpad ซึ่งติดตั้งตัวจัดการ sigaction สำหรับสัญญาณ SIGSEGV, SIGABRT, SIGBUS

ตามข้อมูลจาก Google I/O 2024 จำนวนการขัดข้องแบบเนทีฟเพิ่มขึ้นตามการแพร่กระจายของเอนจินเกม (Unity, Unreal Engine) และไลบรารีคอมพิวเตอร์วิทัศน์ (ML Kit, OpenCV) นักพัฒนาแอปแบบไฮบริดแนะนำให้เปิดใช้การรายงานข้อขัดข้องแบบเนทีฟเสมอ

คำถามที่พบบ่อย

การรายงานข้อขัดข้องแตกต่างจากการบันทึก日志ปกติอย่างไร

การรายงานข้อขัดข้อง บันทึกเฉพาะสถานการณ์ฉุกเฉินพร้อมบริบทที่สมบูรณ์ — สแต็กการเรียก, สถานะหน่วยความจำ, เวอร์ชันระบบปฏิบัติการ การบันทึก日志บันทึกเหตุการณ์ทั้งหมดของแอป การรายงานข้อขัดข้องส่งข้อมูลไปยังเซิร์ฟเวอร์โดยอัตโนมัติ ในขณะที่การบันทึก日志ต้องการการวิเคราะห์ด้วยตนเอง

ควรเลือกบริการรายงานข้อขัดข้องใดสำหรับสตาร์ทอัพ

Firebase Crashlytics เป็นตัวเลือกที่เหมาะสมที่สุดสำหรับสตาร์ทอัพ: ฟรี, รวมได้ง่าย, รองรับ iOS และ Android เมื่อโปรเจกต์เติบโตขึ้น สามารถเพิ่ม Sentry สำหรับการตรวจสอบประสิทธิภาพหรือ Bugsnag สำหรับการวิเคราะห์เส้นทางผู้ใช้

สามารถใช้การรายงานข้อขัดข้องในโปรเจกต์องค์กรแบบปิดได้หรือไม่

ได้ — Sentry มีรุ่นโฮสต์เองที่ปรับใช้บนเซิร์ฟเวอร์ของคุณเอง ข้อมูลทั้งหมดยังคงอยู่ในโครงสร้างพื้นฐานของบริษัท Crashlytics และ Bugsnag ทำงานเป็นบริการคลาวด์เท่านั้นกับเซิร์ฟเวอร์ของ Google และ SmartBear ตามลำดับ

การรายงานข้อขัดข้องส่งผลต่อขนาดแอปอย่างไร

น้อยมาก — SDK ของ Crashlytics เพิ่ม ~300 KB ให้กับขนาด APK/IPA Sentry — ~500 KB ทั้งสองบริการรองรับ การบดบัง ProGuard/R8 สำหรับ Android และ Bitcode สำหรับ iOS ซึ่งลดผลกระทบต่อขนาดไฟล์ไบนารีสุดท้าย

ทำไมรายงานข้อขัดข้องอาจไม่ถึง

สาเหตุหลัก: การหมดเวลาของตัวจัดการ (iOS 5 วินาที, Android 100 ms), ไม่มีเครือข่ายเมื่อเปิดครั้งถัดไป, ความเสียหายของที่เก็บข้อมูลในเครื่อง Crashlytics รับประกันการส่งรายงาน 99.7% เมื่อปฏิบัติตามขีดจำกัดเวลาของตัวจัดการ

สรุป

  • การรายงานข้อขัดข้อง — องค์ประกอบที่จำเป็นของแอปในสภาพแวดล้อมการทำงานจริง ลดการวินิจฉัยข้อผิดพลาดจากวันเป็นนาที
  • Firebase Crashlytics — ผู้นำตลาดด้วยแผนฟรีและการจัดกลุ่มข้อขัดข้องอัตโนมัติเป็น issue
  • Sentry — ทางเลือกโอเพนซอร์สพร้อมการตรวจสอบประสิทธิภาพและการปรับใช้แบบโฮสต์เอง
  • การรายงานข้อขัดข้องบน iOS ต้องสกัดกั้น NSException, สัญญาณ POSIX และข้อยกเว้น mach เพื่อครอบคลุมทั้งหมด
  • ANR บน Android ไม่ถูกสกัดกั้นโดย Thread.setDefaultUncaughtExceptionHandler มาตรฐาน — ต้องใช้เธรด watchdog
  • การขัดข้องแบบเนทีฟ ในโค้ด JNI จัดการผ่าน Breakpad หรือ Crashpad ด้วยตัวจัดการ sigaction
  • รายงานที่ไม่ร้ายแรง ขยายความครอบคลุมไปยังข้อยกเว้นที่ถูกจัดการและตรรกะทางธุรกิจโดยไม่ขัดจังหวะเซสชันผู้ใช้

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม