Я пытаюсь проверить свою аналитику крушения. Я не понимал, как сложно сделать атаку приложения по своему усмотрению. это кажется таким простым средним программированием. Кто-нибудь имеет предложение о том, как я могу заставить приложение сбой? И я не имею в виду небольшую ошибку «ошибка памяти», я имею в виду, что телефон не знает, что делать с собой. Мне нужно, чтобы он, по крайней мере, вошел в журналы устройств в качестве сбоя, в организаторе Xcode. Какие-либо предложения?Какой самый быстрый способ заставить приложение iOS сбой?
ответ
@throw NSInternalInconsistencyException;
, этот работал. Я принял этот ответ, потому что он пришел первым, но утверждать (нет) также работал.также я выбрал этот, потому что он, по-видимому, является родным для какао, в отличие от C, поэтому яблоко разработало это по этой конкретной причине (моя догадка) – Katushai
Бросание исключения не обязательно приводит к сбою. Если исключение будет поймано, программа может продолжить. Если исключение не будет обработано, будет вызываться системная функция 'terminate()', которая в свою очередь вызывает 'abort()'. То есть, строго, программа НЕ сбой, но она _terminates_. – CouchDeveloper
завершение привело к сообщению о сбоях моей аналитике, так что это сработало для моих целей. – Katushai
Просто напишите assert(NO)
. Это проверяет условие, заданное как параметр, и приводит к сбою приложения, если оно ложно.
Edit:
exit(0)
также сделать трюк
Это также работает при компиляции для выпуска версии? – Stavash
этот метод работал. я должен был принять другой ответ, потому что он пришел первым, хотя. очень хорошо. это похоже на то, что большинство людей не знает, может вызвать сбой на iOS – Katushai
@Stavash По умолчанию нет. Но это легко сделать. Проверьте настройки своей цели: Apple LLVM 5.0 - Предварительная обработка> Включить утверждения утверждений. – Desdenova
более контролируемым способом был бы на самом деле бросить исключение себя:
@throw [NSException exceptionWithName:NSGenericException reason:@"" userInfo:nil];
Проверьте NSException.h
больше исключений.
Так много способов убить приложение! Вот два один лайнеры:
[self performSelector:@selector(die_die)];
также
@[][666];
int* p = 0;
*p = 0;
дает EXC_BAD_ACCESS (code=2, address=0x0)
Edit:
После Greg Parkers комментарий о том, что компилятор позволил оптимизировать прочь вышеупомянутые заявления, это сделало меня думаю, что более подробно об этих заявлениях, и почему Грег Паркер прав:
В самом деле, разыменования указателя NULL является «неопределенное поведение» в C и C++ (см также C99 §6.5.3.2/4).
Это означает, что приведенные выше утверждения зависят от компилятора. Это «неопределенное поведение» также означает, что компилятору разрешено применять несколько оптимизаций, что может привести к тому, что вышеуказанные утверждения будут «оптимизированы», как утверждает Грег Паркер.
Ну, теперь, когда меня интересно, что лязг бы на самом деле:
Это небольшая тестовая программа:
int main(int argc, const char * argv[])
{
int* p = 0;
*p = 0;
return 0;
}
с оптимизацией, установленным в «-Ofast», мы получаем эту разборку:
0x100000f90: pushq %rbp
0x100000f91: movq %rsp, %rbp
0x100000f94: ud2
где ud2
это код операция означает «неопределенный» опкод и вызывает исключение процессора:
`EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)`
(Возможно, @GregParker может комментировать, почему clang выбирает этот подход?)
Хотя это интересно, оно относится только к «разыменованию указателя NULL». Если мы вместо этого:
int* p = (int*)1;
*p = 0;
программа падает, как и ожидался, - но требуют «предпосылки», что аппаратное обеспечение отказывается записывают данные (недействительный) адрес.
Компилятор может оптимизировать это. –
@GregParker Правда, но это другая «проблема»;) – CouchDeveloper
+1 для описательного исправленного ответа – Katushai
*(long*)0 = 0xDEADBEEF;
Дает EXC_BAD_ACCESS
Компилятор может оптимизировать это. –
Для быстры они работали для меня:
assert(false, "sdf")
И это:
var hey:[Int] = []
hey[0] = 1
Пожалуйста, объясните, почему ваш ответ является решением вопроса. – Qix
Я не знаю почему и не очень забочусь. он сбой и делает это с минимальным кодом – Esqarrouth
Вы ответчик, вам все равно. – Qix
Я часто бывает полезно иметь приложение запускается, сделайте свое дело немного, а затем сработайте через 10 секунд. В этом случае (для Objective-C), я использую:
[self performSelector:NSSelectorFromString(@"crashme:") withObject:nil afterDelay:10];
Второе преимущество этого является то, что компилятор не выдает никаких предупреждений (при использовании Objective-C) о селекторе не найден , :)
Swift:
self.perform("crashme:", with: nil, afterDelay: 10)
Я думаю, что хороший старый индекс массива вне диапазона является гарантией успешного "аварии", так вот мой любимый список:
Swift 4 :
[][0]
fatalError()
Objective-C:
@[][0];
int *x = nil; *x = 0;
Хотя @throw NSInternalInconsistencyException;
исправляет проблему, является исключением (не авария), следовательно, может быть caught.
- 1. Какой самый простой способ сделать быстрый сбой?
- 2. Какой будет самый быстрый способ?
- 3. Какой самый быстрый способ изменить порядок Массив
- 4. Самый быстрый способ создать базовое Flash-приложение
- 5. Самый быстрый способ подавить угловое приложение 1.4?
- 6. Какой самый быстрый способ разобрать эту строку
- 7. Какой самый быстрый способ получить онлайн компьютеры
- 8. PHP Какой самый быстрый способ подсчета строк?
- 9. Какой самый быстрый способ петли? [for любопытство]
- 10. Какой самый быстрый способ получить подкап карты
- 11. Какой самый быстрый способ установить массив numpy?
- 12. sqlite, какой самый быстрый способ получить строку?
- 13. Какой самый быстрый способ скопировать строку mysql?
- 14. redis: какой самый быстрый способ пересечь
- 15. CodeIgniter СЕЙЧАС() insert: какой самый быстрый способ?
- 16. Какой самый быстрый способ рассортировать pandas DataFrame?
- 17. Какой самый быстрый способ открыть представление LogCat?
- 18. iOS самый быстрый способ рисовать много прямоугольников
- 19. Самый быстрый способ упаковать приложение консоли Java
- 20. Какой самый надежный способ заставить UIView перерисовать?
- 21. Самый быстрый способ импорта?
- 22. iOS Самый быстрый способ извлечения подстроки
- 23. Самый быстрый способ сделать тени на iOS?
- 24. Самый быстрый/самый простой способ обновить datagridview?
- 25. Какой самый безопасный способ создать приложение «всегда регистрируемое» IOS?
- 26. Каков самый быстрый способ простого слияния файлов и какой самый быстрый способ разделить массив?
- 27. Какой самый быстрый способ отправить много данных по BLE?
- 28. Самый быстрый способ взять
- 29. Самый быстрый способ Алгоритм
- 30. Какой способ сохранить приложение ios?
Просто доступ к элементу вне области массивов ... –
Просто продолжайте кодирование, это произойдет в конце концов :) –
Я попытался получить доступ к элементу вне области массива, но это не сработало. просто рассматривал его как null. и когда я попытался разделить это значение, он просто рассматривал его как 0. поскольку он является архитектурой ARM, он фактически делит на ноль и продолжает идти – Katushai