Το σφάλμα εφαρμογής στο Mac είναι γενικά αρκετά σπάνιο. Αλλά όταν συμβαίνουν, μπορεί να θέλετε να εντοπίσετε την αιτία τους. Και αν είστε προγραμματιστής, πρέπει να καταλάβετε γιατί η εφαρμογή σας καταρρέει. Ακολουθεί ο τρόπος ανάγνωσης αναφορών σφαλμάτων MacOS και ταξινόμησης μέσω της κρυπτικής γλώσσας.

Άνοιγμα αναφορών σφαλμάτων

Όταν συνυπάρχει μια εφαρμογή σε Mac, δημιουργεί αυτόματα μια αναφορά σφάλματος. Θα δείτε ότι αυτό εμφανίζεται μετά τη συντριβή με ένα παράθυρο προειδοποίησης λέγοντας " [App] έχει κλείσει απροσδόκητα. "Αυτή η αναφορά σφαλμάτων είναι διαθέσιμη για να διαβάσει αμέσως σε αυτό το παράθυρο κάνοντας κλικ στο κουμπί" Αναφορά ... ". Η αναφορά σφαλμάτων μπορεί επίσης να βρεθεί στην εφαρμογή Κονσόλα.

1. Ανοίξτε την εφαρμογή Κονσόλας πληκτρολογώντας "Κονσόλα" σε Spotlight ή πλοηγώντας στην "Εφαρμογή -> Βοηθήματα -> Console.app".

2. Κάντε κλικ στο "Αναφορές χρηστών" στο αριστερό μενού και στη συνέχεια κάντε κλικ στην αναφορά σύγκρουσης που θέλετε να προβάλετε. Όλα αυτά τα αρχεία θα λήξουν με ".crash" και θα περιλαμβάνουν την ημερομηνία και τη συντριβή της εφαρμογής στον τίτλο. Οι λεπτομέρειες της αναφοράς σφαλμάτων είναι διαθέσιμες στο παράθυρο στα δεξιά.

Ανάγνωση Αναφορών Crash MacOS

Ας πλοηγηθεί στην αναφορά σύγκρουσης από πάνω προς τα κάτω.

Τι συνέτριψε;

Το πρώτο μέρος της αναφοράς έκτακτης ανάγκης σας ενημερώνει για το τι συνέβη κατά τη διαδικασία ή την εφαρμογή. Το πιο σημαντικό μέρος για το μέσο εργαλείο αντιμετώπισης προβλημάτων είναι το όνομα της διαδικασίας.

 Διαδικασία: aText [11473] Διαδρομή: /Applications/aText.app/Contents/MacOS/aText Αναγνωριστικό: com.trankynam.aText Έκδοση: 2.19 (62) Τύπος Κώδικα: X86-64 (Μητρική) Γονική Διαδικασία: ??? [1] Υπεύθυνος: aText [11473] Κωδικός χρήστη: 501 

Πότε συνέτριψε;

Το δεύτερο μέρος μας λέει πότε συνέβη η σύγκρουση. Παρέχει επίσης κάποιες πληροφορίες σχετικά με το σύστημά σας.

 Ημερομηνία / Ώρα: 2018-03-15 00: 58: 10.552 -0400 OS Έκδοση: Mac OS X 10.12.6 (16G1036) Αναφορά έκδοσης: 12 Ανώνυμο UUID: 6C985CFD-6975-3F30-50EB-0713315F5090 Ώρα Αφύπνισης Από την εκκίνηση: 630000 δευτερόλεπτα Προστασία ακεραιότητας συστήματος: ενεργοποιημένη 

Τι προκάλεσε τη συντριβή;

Το επόμενο μέρος είναι το πιο φωτιστικό. Ο "τύπος εξαίρεσης" που παρέχεται από την εφαρμογή μας εξηγεί τι προκάλεσε τη συντριβή. Το αρχείο καταγραφής αναφέρει επίσης ποιο νήμα συνετρίβη: σε αυτή την περίπτωση, το νήμα 0.

 Συντριπτικό Θέμα: 0 ουρά αποστολής: com.apple.main-thread Τύπος εξαίρεσης: EXC_BAD_ACCESS (SIGSEGV) Κωδικοί εξαίρεσης: KERN_INVALID_ADDRESS στο 0x000040dedeadbec0 Σημείωση εξαίρεσης: EXC_CORPSE_NOTIFY Σήμα τερματισμού: Σφάλμα κατάτμησης: 11 Σφάλμα τερματισμού: χειριστής [0] 

Η Apple παραθέτει κάποιους κοινούς τύπους εξαίρεσης στον τεχνικό τους φάκελο:

  • Κακή πρόσβαση μνήμης ( EXC_BAD_ACCESS / SIGSEGV / SIGBUS ) - το πρόγραμμα προσπαθεί να αποκτήσει πρόσβαση στη μνήμη λανθασμένα ή με μη έγκυρη διεύθυνση. Επισυνάπτεται κώδικας που εξηγεί το ζήτημα της μνήμης.
  • Μη φυσιολογική έξοδος ( EXC_CRASH / SIGABRT ) - μη φυσιολογική έξοδος, συνήθως στο χέρι μιας εξαίρετης C ++ εξαίρεσης και κλήσεις για abort()
  • Trace Trap ( EXC_BREAKPOINT / SIGTRAP ) - όπως το SIGABRT, αλλά αυτή η έξοδος δίνει στον συνημμένο debugger την ευκαιρία να διακόψει τη διαδικασία σε σημείο διακοπής και να ανιχνεύσει το σφάλμα.
  • Παράνομη οδηγία ( EXC_BAD_INSTRUCTION / SIGILL ) - η επεξεργασμένη έκδοση εξέδωσε εντολή που δεν κατανοήθηκε ή δεν ήταν δυνατή η επεξεργασία της.
  • Quit ( SIGQUIT ) - η διαδικασία τερματίστηκε από μια άλλη διαδικασία με επαρκή προνόμια. Συνήθως, μια διαδικασία παρακολούθησης καταλήγει σε μια διαδικασία κακής συμπεριφοράς.
  • Killing ( SIGKILL ) - η διαδικασία τερματίστηκε κατόπιν αιτήματος του συστήματος. Για την εξήγηση της εξαίρεσης θα επισυναφθεί ένας κωδικός τερματισμού.

Όπως μπορούμε να διαπιστώσουμε από την αναφορά συντριβής, η εφαρμογή προσπάθησε να αποκτήσει πρόσβαση στη μη καταχωρημένη μνήμη. Αυτό οφείλεται σε σφάλμα προγραμματισμού στην εφαρμογή ή σε ασυνήθιστη κατάσταση χρήστη που προκαλεί την εσφαλμένη χαρτογράφηση της μνήμης.

Τι οδηγεί στη συντριβή;

Μετά από αυτό βλέπουμε μια αντίστροφη χρονολογική λίστα του τι οδηγεί μέχρι τη συντριβή. Αυτά ταξινομούνται ανά νήμα, ξεκινώντας με το νήμα 0.

Υπάρχουν τέσσερις στήλες σε αυτήν την αναφορά. Η πρώτη αναφέρει τον αριθμό του συμβάντος σε αντίστροφη χρονολογική σειρά, ξεκινώντας από το 0. Το δεύτερο είναι το αναγνωριστικό της διαδικασίας. Η τρίτη είναι η διεύθυνση της διαδικασίας στη μνήμη. Το τέταρτο είναι το όνομα του έργου του προγράμματος.

Αυτή η "παρακέντηση" μπορεί να είναι κάπως αινιγματική. Είναι "συμβολισμένο", που σημαίνει ότι μερικές από τις διευθύνσεις μνήμης έχουν αντικατασταθεί με ονόματα λειτουργιών ή εργασίες εφαρμογής. Μερικές φορές αυτό δεν μπορεί να γίνει εντελώς, αφήνοντας τις μη αναγνώσιμες διευθύνσεις μνήμης διάσπαρτες μέσα από την αναφορά.

Βλέπουμε αυτό στην αναφορά σύγκρουσης παραπάνω: com.trankynam.aText δεν συμβολίζεται. Ακόμη και με πλήρη συμβολισμό, μπορεί να είναι δύσκολο να διαβάσετε την επιστροφή. Μερικές φορές οι προγραμματιστές περιλαμβάνουν χρήσιμες σημειώσεις σχετικά με τις εργασίες και τα συμβάντα εφαρμογής. Άλλες φορές, είναι κρυμμένοι τίτλοι ή αριθμητικός κώδικας. Εάν μπορείτε να κατανοήσετε την συμβολική εικόνα, ίσως να μπορείτε να καταλάβετε τι συμβαίνει. Αλλά είναι εξίσου πιθανό ότι θα χρειαστεί να έχετε κωδικοποιήσει την εφαρμογή μόνοι σας για να κατανοήσετε την παραβίαση.

Συμπέρασμα: Είναι αυτό χρήσιμο;

Εάν είστε προγραμματιστής, η ανάγνωση αναφορών σφαλμάτων είναι απαραίτητη. Σας βοηθά να καταλάβετε ποιο μέρος της εφαρμογής σας συντρίβει και γιατί. Αν είστε χρήστης, δεν είναι τόσο χρήσιμοι. Ωστόσο, εάν έχετε συνεχή συντριβή, οι αναφορές σφαλμάτων μπορούν να σας βοηθήσουν να επιλύσετε το πρόβλημα ή να συνεργαστείτε με τον προγραμματιστή για να διορθώσετε το πρόβλημα. Μπορεί να έχετε έναν χρήσιμο κώδικα σφάλματος στο Google ή να είστε σε θέση να παρέχετε τεχνική υποστήριξη με τις σωστές πληροφορίες. Εάν θέλετε τα σκονισμένα στοιχεία, μπορείτε να διαβάσετε τα πάντα για αυτό στην τεχνική σημείωση της Apple σχετικά με τις συντριβές.