Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Mac

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

การล้มเหลวของแอปบน Mac โดยทั่วไปแล้วค่อนข้างนادرة แต่เมื่อเกิดขึ้น คุณอาจต้องการติดตามสาเหตุ และหากคุณเป็นนักพัฒนา คุณจำเป็นต้องเข้าใจว่าทำไมแอปของคุณถึงล้มเหลว นี่คือวิธีอ่านรายงานข้อผิดพลาด macOS และจัดเรียงภาษาที่ปริศนา

เปิดรายงานข้อผิดพลาด

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

เมื่อแอปล้มเหลวบน Mac ของคุณ มันจะสร้างรายงานข้อผิดพลาดโดยอัตโนมัติ คุณจะเห็นมันปรากฏหลังจากล้มเหลวพร้อมกล่องโต้ตอบเตือนที่พูดว่า "[App] has quit unexpectedly." รายงานข้อผิดพลาดนั้นพร้อมอ่านทันทีในหน้าต่างนั้นโดยคลิกปุ่ม "Report..." รายงานข้อผิดพลาดยังพบได้ในแอป Console

1. เปิดแอปพลิเคชัน Console โดยพิมพ์ "Console" ลงใน Spotlight หรือไปที่ "Application -> Utilities -> Console.app"

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

2. คลิก "User Reports" ในเมนูซ้าย แล้วคลิกที่รายงานข้อผิดพลาดที่คุณต้องการดู ไฟล์ทั้งหมดจะลงท้ายด้วย ".crash" และรวมวันที่และแอปพลิเคชันที่ล้มเหลวในชื่อ ไปรายละเอียดของรายงานข้อผิดพลาดพร้อมในแผงด้านขวา

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

อ่านรายงานข้อผิดพลาด macOS

มาดูรายงานข้อผิดพลาดจากบนลงล่างกัน

อะไรล้มเหลว?

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

ส่วนแรกของรายงานข้อผิดพลาดบอกคุณว่า "กระบวนการ" (process) หรือแอปพลิเคชันใดล้มเหลว ส่วนสำคัญที่สุดสำหรับผู้แก้ปัญหาทั่วไปคือชื่อกระบวนการ

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

เมื่อไหร่ล้มเหลว?

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

ส่วนที่สองบอกเราว่าข้อผิดพลาดเกิดขึ้นเมื่อไหร่ มันยังให้ข้อมูลเล็กน้อยเกี่ยวกับระบบของคุณ

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

อะไรทำให้ล้มเหลว?

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

ส่วนถัดไปเป็นส่วนที่ส่องสว่างที่สุด "ประเภทข้อยกเว้น" (exception type) ที่แอปพลิเคชันให้มา บอกเราว่าสิ่งใดทำให้ล้มเหลว ล็อกยังรายงานว่าธรेडไหนล้มเหลว: ในกรณีนี้คือเธรด 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()
  • Trace Trap (EXC_BREAKPOINT / SIGTRAP) – คล้าย SIGABRT แต่ออกจากโปรแกรมนี้ให้ดีบักเกอร์ที่แนบมามีโอกาสหยุดกระบวนการที่จุดหยุด (breakpoint) และติดตามข้อผิดพลาด
  • คำสั่งผิดกฎหมาย (EXC_BAD_INSTRUCTION / SIGILL) – กระบวนการออกคำสั่งที่ไม่เข้าใจหรือไม่สามารถประมวลผลได้
  • Quit (SIGQUIT) – กระบวนการถูกยุติโดยกระบวนการอื่นที่มีสิทธิ์เพียงพอ โดยทั่วไปกระบวนการ watchdog ยุติกระบวนการที่ทำงานผิดปกติ
  • Killed (SIGKILL) – กระบวนการถูกยุติ بناء על בקשתระบบ รหัสการยุติจะต่อท้ายเพื่ออธิบายข้อยกเว้น

จากรายงานข้อผิดพลาดของเรา เราเห็นว่าแอปพลิเคชันพยายามเข้าถึงหน่วยความจำที่ไม่ได้แมป นี่เกิดจากข้อผิดพลาดในการเขียนโปรแกรมของแอปพลิเคชัน หรือสถานะผู้ใช้ที่ผิดปกติทำให้แอปพลิเคชันแมปหน่วยความจำผิด

อะไรนำไปสู่การล้มเหลว?

วิธีอ่านรายงานข้อผิดพลาด macOS เพื่อแก้ไขปัญหา Mac

หลังจากนั้นเราเห็นรายการตามลำดับเวลาย้อนกลับของสิ่งที่นำไปสู่การล้มเหลว เรียงตามเธรด เริ่มจากเธรด 0

มีคอลัมน์ 4 คอลัมน์ในรายงานนี้ คอลัมน์แรกรายงานหมายเลขเหตุการณ์ในลำดับเวลาย้อนกลับ เริ่มที่ 0 คอลัมน์ที่สองคือตัวระบุกระบวนการ คอลัมน์ที่สามคือที่อยู่ของกระบวนการในหน่วยความจำ คอลัมน์ที่สี่คือชื่องานของโปรแกรม

"Backtrace" นี้อาจทำให้สับสน มัน "symbolicated" หมายความว่าที่อยู่หน่วยความจำบางส่วนถูกแทนที่ด้วยชื่อฟังก์ชันหรืองานของแอปพลิเคชัน บางครั้งทำไม่ได้สมบูรณ์ ทำให้ที่อยู่หน่วยความจำที่อ่านไม่ได้กระจายอยู่ในรายงาน

เราเห็นสิ่งนี้ในรายงานข้อผิดพลาดข้างต้น: com.trankynam.aText ไม่ได้ถูก symbolicated แม้ด้วยการ symbolicated ให้สมบูรณ์ อาจยากที่จะอ่าน backtrace บางครั้งนักพัฒนารวมโน้ตที่มีประโยชน์เกี่ยวกับงานและเหตุการณ์ของแอปพลิเคชัน บางครั้งเป็นชื่อลึกลับหรือโค้ดตัวเลข หากคุณเข้าใจ symbolication ได้ คุณอาจเข้าใจว่ากำลังเกิดอะไรขึ้น แต่ก็เป็นไปได้เท่าๆ กันที่คุณจะต้องเขียนโค้ดแอปพลิเคชันเองจึงจะเข้าใจ backtrace ได้

สรุป: นี่มีประโยชน์ไหม?

หากคุณเป็นนักพัฒนา การอ่านรายงานข้อผิดพลาดเป็นสิ่งจำเป็น มันช่วยให้คุณเข้าใจว่าส่วนไหนของแอปพลิเคชันล้มเหลวและทำไม หากคุณเป็นผู้ใช้ มันไม่ค่อยช่วยได้มาก แต่หากคุณมีข้อผิดพลาดที่ซ้ำซ้อน รายงานข้อผิดพลาดสามารถช่วยคุณแก้ไขปัญหาหรือทำงานกับนักพัฒนาเพื่อแก้ปัญหา คุณอาจได้รหัสข้อผิดพลาดที่มีประโยชน์สำหรับการ Google หรือให้ข้อมูลที่ถูกต้องกับฝ่ายสนับสนุนทางเทคนิค หากคุณต้องการรายละเอียดครบถ้วน คุณสามารถอ่านได้ทั้งหมดในบันดร technical note ของ Apple เกี่ยวกับการล้มเหลว