Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's a reliable way to make an iOS app crash?

in Objective-C use C directly to cause a bad access

strcpy(0, "bla");

Note: while this works on any system I know -- in a future version of the C runtime OR the compiler this might not lead to a crash anymore. see Is null pointer dereference undefined behavior in Objective-C?)

(in swift you would have to bridge to objC to do this)


My current favourite:

assert(! "crashing on purpose to test <insert your reason here>");

A classic:

kill( getpid(), SIGABRT );

And some pr0n:

*(long*)0 = 0xB16B00B5;

All of them generate crashes captured by my crash reporting tool.


Since we all use Clang for iOS, this is fairly reliable:

__builtin_trap();

This has the benefit that it's designed for exactly this purpose, so it shouldn't generate any compiler warnings or errors.


How about a good old stack overflow :)

- (void)stackOverflow
{
    [self stackOverflow];
}

abort(); causes abnormal termination… That is a crash.


Most popular one - unrecognised selector crash:

NSObject *object = [[NSObject alloc] init];
[object performSelector:@selector(asfd)];

Make sure you don't have -asdf method implemented in that class haha

Or index beyond bound exception:

NSArray * array = [NSArray array];
[array objectAtIndex:5];

And of course kill( getpid(), SIGABRT );


I think in Swift you could easily throw a fatal error:

func foo() {
    fatalError("crash!")
}

It is actually even intended to use this feature in case something goes wrong in order to make the app crash.

To avoid an if statement in a special case, you could use precondition, too. It's similar to assert, makes thus the intention (if wanted) pretty clear and is not removed in the final release as assert. It is used like precondition(myBoolean, "This is a helpful error message for debugging.").