如何在Xcode中模拟iOS应用程序崩溃?

5

有没有一种方法可以模拟应用程序崩溃?目的是为了检查数据是否能够优雅地保存和保留,即使应用程序在实际用户设备上随机崩溃。


1
除以零是我的常规选择。 - Hot Licks
为什么这个被关闭了? - user5306470
4个回答

10
哦,有很多种方式可以导致你的应用程序崩溃) 例如,索引超出范围异常:
NSArray *array = @[];
array[1];

或者简写为:

@[][1];

1
这种编码错误会导致与应用程序随机崩溃时相同类型的崩溃吗?你知道,即使实际应用程序代码没有问题,也会发生这种情况,例如设备同时运行太多程序、内存不足或设备上的某些东西出现故障? - Halordain
这取决于在崩溃情况下你需要检查什么。例如,如果应用程序由于内存不足而崩溃,行为与代码有问题(即不支持的API方法调用)时的崩溃有所不同。 - Alexander Tkachenko
应用程序经常无缘无故地崩溃。拿出你最喜欢的没有bug的应用程序并运行它1000次。它至少会因为没有明显的原因而崩溃一次。这就是我需要检查的那种崩溃。 - Halordain

5
您可以在调试模式下按停止按钮。

在这种情况下是否调用了“applicationWill...”函数? - user5306470

2

请在您的代码中以编程方式执行此操作。

Xcode是否有任何类似于“嘿,小伙子,让我的应用程序崩溃”的按钮 ^^

NSInvalidArgumentException:

NSMutableArray *tmp = [[NSMutableArray alloc] init];
NSObject *object = nil;
[tmp addObject:object];

细节似乎有些不足... - trojanfoe
这更像是一条注释。 - dasdom
2
真正的Jedi即使没有思考也能轻松地进行崩溃 :) - Alexander Tkachenko

1
在旧的非 ARC 代码中,你可以尝试将 -1 转换为 (NSObject*)(这在 ARC 代码中是不允许的,iOS 4.3 及以上版本),然后尝试获取它的类。
[(NSObject*)-1 class]; // EXC_BAD_ACCESS

与此类似,您可以尝试在现代中进行:

旧好力量制造邪恶。

Swift: 
var nilObj: Array? = nil 
nilObj!

Obj-C:

清晰且安全的方法是使用assert,这将只在调试构建中崩溃

NSAssert(1==0, @"Always crashing assert")

或者你可以尝试生成异常。这将在调试和发布版本上都有效。

[NSException raise:@"Exception", format: @"Reason"];

此答案因其长度和内容而被自动标记为低质量。看起来是正确的答案,为了避免意外删除,请添加一些解释代码的作用或EXC_BAD_ACCESS是什么的话。 - Popnoodles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接