Атаките на приложенията на Mac обикновено са доста редки. Но когато се случват, може да искате да проследите тяхната кауза. И ако сте програмист, трябва да разберете защо приложението ви се разбива. Ето как да четете доклади за макроси и да сортирате скриптния език.

Отваряне на докладите за сривове

Когато дадено приложение се срине на вашия Mac, то автоматично генерира доклад за срив. Ще видите това след катастрофата с предупредителен диалогов прозорец, в който се казва, че " [App] е спрял неочаквано. "Този отчет за сривове е достъпен за прочитане веднага в този прозорец, като кликнете върху бутона" Отчет ... ". Отчетът за сривове може да се намери и в приложението Конзола.

1. Отворете приложението Console, като въведете "Конзола" в Spotlight или отидете на "Приложение -> Помощни програми -> Console.app".

2. Кликнете върху "Потребителски отчети" в лявото меню, след което кликнете върху отчета за сривове, който искате да видите. Всички тези файлове ще завършат с ".crash" и ще включват датата и разбитото приложение в заглавието. Данните за доклада за сривове са налични в екрана отдясно.

Четене на MacOS Crash Reports

Нека да разгледаме отгоре надолу отчета за сривове.

Какво се е разбило?

Първата част на доклада за катастрофата ви разказва какво се е сринало "процесът" или приложението. Най-важната част за средния инструмент за отстраняване на неизправности е името на процеса.

 Процес: 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 Причина за прекратяване: SIGNAL SIGNAL Код 0xb Прекратяване: манипулатор [0] 

Apple изброява някои типове общи изключения в техническата документация:

  • Лош достъп до памет ( EXC_BAD_ACCESS / SIGSEGV / SIGBUS ) - програмата се опитва да получи достъп до паметта неправилно или с невалиден адрес. Добавен с код, обясняващ проблема с паметта.
  • Abnormal Exit ( EXC_CRASH / SIGABRT ) - ненормално излизане, обикновено в ръцете на изключено C ++ изключение и призовава да се abort()
  • Trace Trap ( EXC_BREAKPOINT / SIGTRAP ) - подобно на SIGABRT, но този изход дава на прикачения дебъгер възможността да прекъсне процеса на прекъсване и да проследи грешката.
  • Незаконна инструкция ( EXC_BAD_INSTRUCTION / SIGILL ) - обработената издаде инструкция, която не бе разбрана или не можа да бъде обработена.
  • Quit ( SIGQUIT ) - процесът бе прекратен от друг процес с достатъчни привилегии. Обикновено процесът на наблюдение прекратява неправилното функциониране.
  • Убит ( SIGKILL ) - процесът е прекратен по искане на системата. Ще бъде добавен код за терминиране, за да се обясни изключението.

Както можем да видим от доклада ни за срив, приложението се опита да отвори неотразена памет. Това се дължи на програмна грешка в приложението или на необичайно потребителско състояние, което кара приложението да манипулира неправилно паметта.

Какво доведе до катастрофата?

След това виждаме обратния хронологичен списък на това, което доведе до катастрофата. Те се сортират по нишка, като се започне от нишката 0.

Към този отчет има четири колони. Първият показва номера на събитието в обратен хронологичен ред, започвайки от 0. Вторият е идентификаторът на процеса. Третият е адресът на процеса в паметта. Четвъртото е името на задачата на програмата.

Тази "бакстракция" може да бъде малко объркана. Това е "символизирано", което означава, че някои от адресите на паметта са заменени с имена на функции или задачи на приложението. Понякога това не може да бъде направено напълно, оставяйки нечетливите адреси на паметта разпръснати в отчета.

Виждаме това в доклада за срив по-горе: com.trankynam.aText не е символизирано. Дори и при пълна символикация може да бъде трудно да се прочете бакстрацията. Понякога разработчиците включват полезни бележки за задачите и събитията по приложението. Други пъти те са криптични заглавия или цифров код. Ако можете да осъзнаете символиката, може да сте в състояние да разберете какво се случва. Но е възможно по-рано, че ще трябва да сте кодирали приложението сами, за да разберете от какво се нуждаете.

Заключение: Това ли е полезно?

Ако сте програмист, четенето на доклади за сривове е от съществено значение. Тя ви помага да разберете каква част от приложението ви се срива и защо. Ако сте потребител, те не са толкова полезни. Но ако имате трайна катастрофа, отчетите за сривове могат да ви помогнат да отстраните проблема или да работите с програмиста, за да отстраните проблема. Може да получите полезен код за грешка на Google или да можете да предоставяте техническа поддръжка с подходящата информация. Ако искате тези подробности, можете да прочетете всичко за него в техническата бележка на Apple за катастрофи.