แอพขัดข้องบน Mac นั้นค่อนข้างหายาก แต่เมื่อมันเกิดขึ้น คุณอาจต้องการติดตามสาเหตุของพวกเขา และหากคุณเป็นนักพัฒนาซอฟต์แวร์ คุณต้องเข้าใจสาเหตุที่แอปของคุณขัดข้อง ต่อไปนี้เป็นวิธีอ่านรายงานข้อขัดข้องของ macOS และจัดเรียงภาษาที่คลุมเครือ
การเปิดรายงานข้อขัดข้อง
เมื่อแอพขัดข้องบน Mac ของคุณ แอพจะสร้างรายงานข้อขัดข้องโดยอัตโนมัติ คุณจะเห็นสิ่งนี้ปรากฏขึ้นหลังจากการหยุดทำงานพร้อมกล่องโต้ตอบคำเตือนว่า “[แอป] ออกโดยไม่คาดคิด ” รายงานข้อขัดข้องนั้นพร้อมให้อ่านทันทีในหน้าต่างนั้นโดยคลิกปุ่ม “รายงาน …” รายงานข้อขัดข้องยังอยู่ในแอป Console
1. เปิดแอปพลิเคชัน Console โดยพิมพ์ “Console” ลงใน Spotlight หรือไปที่ “Application -> Utilities -> Console.app”
2. คลิก "รายงานผู้ใช้" ในเมนูด้านซ้าย จากนั้นคลิกรายงานข้อขัดข้องที่คุณต้องการดู ไฟล์ทั้งหมดเหล่านี้จะลงท้ายด้วย ".crash" และรวมวันที่และแอปพลิเคชันที่ขัดข้องในชื่อ รายละเอียดของรายงานข้อขัดข้องอยู่ในบานหน้าต่างด้านขวา
การอ่านรายงานข้อขัดข้องของ macOS
มาดูรายงานข้อขัดข้องจากบนลงล่างกัน
อะไรพัง?
ส่วนแรกของรายงานข้อขัดข้องจะบอกคุณว่า "กระบวนการ" หรือแอปพลิเคชันใดขัดข้อง ส่วนที่สำคัญที่สุดสำหรับเครื่องมือแก้ปัญหาทั่วไปคือชื่อกระบวนการ
Process: aText [11473] Path: /Applications/aText.app/Contents/MacOS/aText Identifier: com.trankynam.aText Version: 2.19 (62) Code Type: X86-64 (Native) Parent Process: ??? [1] Responsible: aText [11473] User ID: 501
พังเมื่อไหร่
ส่วนที่สองบอกเราเมื่อเกิดการชน นอกจากนี้ยังให้ข้อมูลเล็กน้อยเกี่ยวกับระบบของคุณ
Date/Time: 2018-03-15 00:58:10.552 -0400 OS Version: Mac OS X 10.12.6 (16G1036) Report Version: 12 Anonymous UUID: 6C985CFD-6975-3F30-50EB-0713315F5090 Time Awake Since Boot: 630000 seconds System Integrity Protection: enabled
เหตุใดจึงเกิดความผิดพลาด
ส่วนต่อไปคือการส่องสว่างมากที่สุด ”ประเภทข้อยกเว้น” ที่แอปพลิเคชันจัดเตรียมไว้จะบอกเราว่าเหตุใดจึงเกิดข้อขัดข้อง บันทึกยังรายงานว่าเธรดใดขัดข้อง:ในกรณีนี้ เธรด 0
Crashed Thread: 0 Dispatch queue: com.apple.main-thread Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x000040dedeadbec0 Exception Note: EXC_CORPSE_NOTIFY Termination Signal: Segmentation fault: 11 Termination Reason: Namespace SIGNAL, Code 0xb Terminating Process: exc handler [0]
Apple แสดงรายการข้อยกเว้นทั่วไปบางประเภทในเอกสารทางเทคนิค:
- การเข้าถึงหน่วยความจำไม่ถูกต้อง (
EXC_BAD_ACCESS
/SIGSEGV
/SIGBUS
) – โปรแกรมพยายามเข้าถึงหน่วยความจำอย่างไม่ถูกต้องหรือที่อยู่ที่ไม่ถูกต้อง ต่อท้ายด้วยรหัสที่อธิบายปัญหาหน่วยความจำ - ทางออกที่ผิดปกติ (
EXC_CRASH
/SIGABRT
) – ทางออกที่ผิดปกติ โดยทั่วไปจะอยู่ในมือของข้อยกเว้น C++ ที่ไม่ถูกตรวจจับและเรียกใช้abort()
- กับดักการติดตาม (
EXC_BREAKPOINT
/SIGTRAP
) – เช่นเดียวกับ SIGABRT แต่ทางออกนี้ทำให้ดีบักเกอร์ที่แนบมามีโอกาสที่จะขัดจังหวะกระบวนการที่จุดพักและติดตามข้อผิดพลาด - คำสั่งที่ผิดกฎหมาย (
EXC_BAD_INSTRUCTION
/SIGILL
) – การประมวลผลออกคำสั่งที่ไม่เข้าใจหรือไม่สามารถดำเนินการได้ - เลิก (
SIGQUIT
) – กระบวนการถูกยกเลิกโดยกระบวนการอื่นที่มีสิทธิ์เพียงพอ โดยปกติ กระบวนการเฝ้าระวังจะยุติกระบวนการทำงานผิดปกติ - ถูกฆ่า (
SIGKILL
) – กระบวนการถูกยกเลิกตามคำขอของระบบ รหัสการสิ้นสุดจะถูกเพิ่มต่อท้ายเพื่ออธิบายข้อยกเว้น
ตามที่เราเห็นจากรายงานข้อขัดข้อง แอปพลิเคชันพยายามเข้าถึงหน่วยความจำที่ไม่ได้แมป ทั้งนี้เกิดจากข้อผิดพลาดในการเขียนโปรแกรมในแอปพลิเคชันหรือสถานะผู้ใช้ที่ผิดปกติทำให้แอปพลิเคชันจับคู่หน่วยความจำไม่ถูกต้อง
อะไรทำให้เกิดความผิดพลาด
หลังจากนั้น เราจะเห็นรายการตามลำดับเวลาย้อนกลับของสิ่งที่นำไปสู่การชน เหล่านี้ถูกจัดเรียงตามเธรด เริ่มต้นด้วยเธรด 0
รายงานนี้มีสี่คอลัมน์ รายการแรกรายงานหมายเลขของเหตุการณ์ตามลำดับเวลาย้อนกลับ โดยเริ่มต้นที่ 0 รายการที่สองคือตัวระบุของกระบวนการ ที่สามคือที่อยู่ของกระบวนการในหน่วยความจำ ที่สี่คือชื่องานของโปรแกรม
“การย้อนรอย” นี้อาจค่อนข้างทำให้งงงัน เป็น "สัญลักษณ์" ซึ่งหมายความว่าที่อยู่หน่วยความจำบางส่วนถูกแทนที่ด้วยชื่อฟังก์ชันหรืองานแอปพลิเคชัน บางครั้งสิ่งนี้ไม่สามารถทำได้อย่างสมบูรณ์ ทำให้ที่อยู่หน่วยความจำที่อ่านไม่ได้กระจัดกระจายอยู่ในรายงาน
เราเห็นสิ่งนี้ในรายงานข้อขัดข้องด้านบน:com.trankynam.aText
ไม่ได้เป็นสัญลักษณ์ แม้จะมีสัญลักษณ์ครบถ้วน แต่ก็อาจเป็นเรื่องยากที่จะอ่านย้อนหลัง บางครั้งนักพัฒนามีบันทึกที่เป็นประโยชน์เกี่ยวกับงานและกิจกรรมของแอปพลิเคชัน บางครั้งอาจเป็นชื่อที่คลุมเครือหรือเป็นรหัสตัวเลข หากคุณเข้าใจสัญลักษณ์ดังกล่าวได้ คุณก็จะสามารถเข้าใจสิ่งที่เกิดขึ้นได้ แต่เท่าที่เป็นไปได้คุณจะต้องเข้ารหัสแอปพลิเคชันด้วยตัวเองเพื่อให้เข้าใจถึงการติดตามย้อนกลับ
บทสรุป:สิ่งนี้มีประโยชน์หรือไม่
หากคุณเป็นนักพัฒนาซอฟต์แวร์ การอ่านรายงานข้อขัดข้องเป็นสิ่งสำคัญ ช่วยให้คุณเข้าใจว่าส่วนใดของแอปพลิเคชันของคุณขัดข้องและเพราะเหตุใด หากคุณเป็นผู้ใช้ ก็ไม่มีประโยชน์อะไร แต่หากคุณพบข้อขัดข้องอย่างต่อเนื่อง รายงานข้อขัดข้องสามารถช่วยคุณแก้ไขปัญหาหรือทำงานร่วมกับนักพัฒนาเพื่อแก้ไขปัญหา คุณอาจได้รับรหัสข้อผิดพลาดที่เป็นประโยชน์ต่อ Google หรือสามารถให้ข้อมูลที่ถูกต้องแก่ฝ่ายสนับสนุนด้านเทคนิค หากต้องการรายละเอียดที่เต็มไปด้วยเลือด คุณสามารถอ่านข้อมูลทั้งหมดได้ในหมายเหตุทางเทคนิคของ Apple เกี่ยวกับการขัดข้อง