Процесс разработки IOS обычно используется в аварии


введение

Развитие IOS, мы столкнулись с ситуацией, ненормальное выходе из программы, если она находится в процессе отладки, вы можете распечатать или важную информацию путем останова объектов отладки, но и для нек-комплексного модуля теперь будет разрушаться аномалии, такие путь иногда трудно найти проблему, но и для приложений, опубликованных на линии, таким образом, она бессильна.

Обычно мы видим Краш делится на два типа, один является системной ошибкой памяти, вызывая EXC _ BAD _ ACCESS вызван программа запущена в доступе к неправильному адресу памяти, а другой являются возникновением аномального сигнала не может быть обработан , в результате чего программа для отправки себя в SIGABRT коллапсу сигнала, вот что я обычно использую более ускоренный подход, чтобы поделиться с вами.


аварии, вызванные ошибками памяти: Часть 1

➸ 1.1 Причины

  1. адрес памяти доступа не принадлежит в этом процессе.
  2. Доступ освободилась память (повторное освобождение уже освобожденной памяти).

Развитие IOS наследовать NSObject, управление памятью с использованием опорного механизма подсчета для не NSObject механизма ссылки на объект подсчет не работает, мы должны управлять использованием восстановления памяти. Ссылочный принцип подсчета в том, что, когда удерживается объект (Сохранять), счетчик ссылок (retainCount) +1 к, меченного после освобождения (выпуска), retainCount -1 один раз, когда retainCount равно 0, объект освобождается.

При использовании развития ручной счетчик ссылок (MRC), разработчикам необходимо явно вызвать сохранение или освобождение. Реализация Apple, после того, как iOS5 Automatic Reference Counting (ARC), разработчик не должен явно вызвать сохранить или отпустить, и автоматически добавляется компилятором, в удобных разработчиках, но и уменьшает сложность разработки, в то время как проблемы с памятью, когда труднее найти ошибку.


Общие методы лечения ➸ 1.2

Xcode 1.2.1 Добавление глобальной точки останова исключений

① навигатора переключателя в положении точки останова навигатора по адресу:


② внизу слева, нажмите на знак +, выберите Исключение BreakPoint этого параметра.


Исключение точки останова может редактировать множество функций, таких как выполнение сценария, журнал вывода, выберите только ненормальные обработки Objective-C и т.д., функция очень богата.

В следующий раз мы проводим сбои программы, программа автоматически останавливается при разрушении кода, чтобы помочь нам найти проблему.


Объект Debugger 1.2.2 зомби

Глобальная точка останова исключение, как правило, найти причину сбоя конкретного тега. Однако, если не в текущем коллапсу стеки вызовов, система может только сказать нам адрес аварии, но не может найти определенный код, так что мы не смогли бы изменить эту ошибку. Это похоже на следующее:

 

В этом случае мы можем отладить (Zombie Objects) предоставляемые объектами Xcode зомби, чтобы попытаться найти проблему.

первый или открытый Xcode верхний левый угол экрана , чтобы выбрать Xcode-> Preferencese , вкладку поведения, установите о выходе, при отладке вывода для получения дополнительной информации, на следующем скриншоте, крюк:


② меню продукт> Схема> Редактировать Схема в красном круге внутри три варианта находится на крючке:


③ После включения опции, во время выполнения, если доступ к объекту был освобожден , это даст более точную информацию о местоположении , которая может помочь определить проблему.

Принцип этой функции высвобождается (retainCount 0), используя встроенные объекты зомби заменить исходные объекты в объекте должен быть освобожден. Независимо от того, что сообщение посылается (вызов функции) к объекту, это вызовет исключение брошенного информации об отладке.

Примечание: Помните, проблема ремонта, отключить эту функцию! Это приведет к тому, объем памяти программы ненормальным.


④ также может быть через систему терминалов отпечатков с использованием информации о вызове терминала mallochistory команды, такие как «mallochistory 30495 0x60005ef76fd0», где 30495 это процесс PID, PID можно рассматривать в соответствии с лог консоли Xcode, или полученные через Activity Monitor, в соответствии с эта запись может примерно определить положение кода ошибки.

Следующие советы будут похожи на код, в соответствии с какой-то ключевой информацией, вы можете определить конкретное место ошибки.



1.2.3 Использование лечение NSSetUncaughtExceptionHandler

Перед тем, эти два метода, можно сказать, для APP онлайн бессильна, хорошо, IOS обеспечивает исключение происходит обработка API, NSSetUncaughtExceptionHandler, мы можем добавить этот обработчик при запуске программы, аномальное появление такой программы, когда он Это может сделать необходимую информацию этой части процесса, своевременной обратной связи с разработчиками. Обратите внимание, что при использовании NSSetUncaughtExceptionHandler аварии могут быть использованы для лечения ненормальным, то система будет врезаться отчет, предоставленный глобальный обработчик исключений метода NSSetUncaughtExceptionHandler. Если пользовательский NSSetUncaughtExceptionHandler мониторинг события приведут к монитору третьей стороной (например, Bugly) отказ, она была интегрирована платформой для стороннего мониторинга малых партнеров необходимо обратить внимание.

Регистрация Глобалы обработчик для обработки исключений , программа начинает или иной регистрационный вход:


② Когда интерактивная программа появляется сбой, код будет выполняться для обработки ранее зарегистрированными в сообщении об ошибке будет храниться локально.


③ сохраняются через интернет - приложение dSYM таблицы символов проблемы поиска .

таблица Строительство символ IOS генерируется, когда это адрес памяти, имя функции, имя файла, номер строки таблицы отображения. Символ элементов таблицы следующим образом:

Когда сбой приложения, мы можем использовать информацию стеки, полученную в ходе информации стеки аварии, соответствующей исходный код, вы можете увидеть номер кода ошибки в строке, мы можем быстро найти местоположение коды ошибки, чтобы быстро решить эту проблему.

Получить в таблицу символов dSYM журнала ошибок и до сбоя программы, мы можем локализовать проблему.


④ использовать Atos команду , чтобы локализовать проблему.

Atos команды для загрузки конкретного модуля символьных адресов Atos [-arch имени схемы] [-o таблицы символов] [-l адрес модуля] [Метод Address]

Рассчитано с помощью терминала, то первое, чтобы получить шестигранный диапазон адресов.

исполнение терминала код:

Таким образом, вы можете найти код проблемы.



Часть 2: ненормальный сигнал Маха-индуцированный и авария сигнал

➸ 2.1 Мах и сигнал

Mach является основной микроядра Mac OS и IOS операционных систем, Мах аномалией является самым низким уровнем за исключением уровня ядра, поэтому, когда ненормальное APP, первый, чтобы иметь возможность слушать исключение является Маха.

Первым захватил Мах исключение все исключения будут рядом преобразованы в соответствующие сигналы Unix и доставлены к ошибке резьбы. После чего вы можете зарегистрировать тип сигнала , который вы хотите слушать, чтобы захватить сигнал. Обработка исключений использует Objective-C не может получить сигнал, если вы хотите иметь дело с этим, мы должны использовать стандартный механизм сигналов Unix, зарегистрированный обработчик при генерации сигнала SIGABRT, SIGBUS, SIGSEGV и так далее. Функция , которую мы можем выводить информацию о стеке, а также другие информационные версии все , что мы хотим. Следует, что SIGSEGV сигнала монитора, SIGSEGV сигнал генерируется , когда есть, он будет метод обратного вызова mySignalHandler: Сигнал (SIGSEGV, mySignalHandler).


➸ Описание сигналов 2.2 сигналов

Способ по умолчанию обработки сигналов в общей сложности пяти, соответственно Terminate (завершить процесс, а именно узел East Process), игнорировать (игнорировать сигнал), дамп (завершить процесс и дамп ядра: конец процесса и создает дамп ядра, процесс информации о памяти распечатать его), Stop (пауза запуска процессов, используемый для отладки) и Cont (возобновить приостановленный процесс перед запуском мультизамещенной для отладки) для представления.

Сигнал Тип сигнала:

Сигнал

обработка по умолчанию

объяснение

SIGABRT

свалка

команда завершения программы

SIGALRM

прекратить

сигнал тайм-аута

SEAL

свалка

нелегальный сигнал команды программы

Sig ः уф

прекратить

терминал прерывания сигнала программы

SIGINT

прекратить

сигнал прерывания клавиатуры программы

SIGKILL

прекратить

Программа принудительный сигнал конца

SIGTERM

прекратить

сигнал завершения программы

SIGSTOP

Стоп

Клавиатура сигнал программы прерывания

SIGSEGV

свалка

сигнал прерывания недействительна память программы

SIGBUS

свалка

сигнал прерывания выровненных байт памяти программы

SIGPIPE

прекратить

Программа Оправа не удалось отправить сигнал остановки

Если нет набора обработчика, соответствующего сигналу, он будет использовать по умолчанию обработчика, в противном случае сигнал был перехвачен и вызвать соответствующий процесс обработчика. При отсутствии обработчика, программа может определить два поведения: игнорировать SIG_IGN сигнала или использовать по умолчанию обработчик SIG_DFL. Но есть два сигнала не может быть перехвачено и обработано: SIGKILL, SIGSTOP.


➸ 2,3 сигнала обработки сигнала

зарегистрирован глобальный обработчик обрабатывать сигнал исключения начал в программе или другой регистрации входа.

О типе ошибки может быть виден выше описания, SignalExceptionHandler представляет собой сигнал ошибки, когда обратный вызов. Когда сигнал неправильно, вы можете перезвонить к этому методу.


SignalHandler Не испытывай в отладочной среде . Поскольку отладка системы будет отдавать приоритет перехватывать. Я бег один раз в тренажере, выключите состояние отладки, а затем нажмите на нашем застроить приложения непосредственно на эмуляторе для запуска. Бревна получают следующим образом :


Часть 3: резюме

Для приложений аварии, есть много отличной платформа для третьей стороны (Лига друзей, bugly и т.д.) и обеспечивают функцию журнала RBI, было в состоянии удовлетворить ежедневные потребности развития, но изучение этой общую аварии было в состоянии помочь нам понять механизм управления IOS, это развитие Некоторые аварии часто видим, сам процесс может быть сложным, необходимо использовать различные способы, чтобы локализовать проблему и гибко использовать.




рекомендация

отblog.csdn.net/weixin_34408717/article/details/91397292