Nes*_*tor 134 iphone objective-c ios
我想在用户执行一个真实用户不太可能意外执行的特定操作时故意让它崩溃,从而测试我的应用程序崩溃报告.
但是什么是使编译时不会产生警告的应用程序崩溃的可靠方法?
编辑:请注意,这个问题的许多看似明显的答案导致Cocoa捕获的异常,因此不会导致应用程序崩溃.
Dai*_*jan 138
在Objective-C中直接使用C导致访问不良
strcpy(0, "bla");
Run Code Online (Sandbox Code Playgroud)
注意:虽然这适用于我所知道的任何系统 - 在未来版本的C运行时或编译器中,这可能不会导致崩溃.请参阅Objective-C中的空指针取消引用未定义行为?)
(在swift中你必须桥接到objC才能这样做)
djr*_*ero 96
我目前最喜欢的:
assert(! "crashing on purpose to test <insert your reason here>");
Run Code Online (Sandbox Code Playgroud)
经典之作:
kill( getpid(), SIGABRT );
Run Code Online (Sandbox Code Playgroud)
还有一些pr0n:
*(long*)0 = 0xB16B00B5;
Run Code Online (Sandbox Code Playgroud)
所有这些都会导致崩溃报告工具捕获崩溃.
Die*_*Epp 26
由于我们都使用Clang for iOS,这是相当可靠的:
__builtin_trap();
Run Code Online (Sandbox Code Playgroud)
这样做的好处是它专门用于此目的,因此不应生成任何编译器警告或错误.
Tau*_*aum 22
一个好的旧堆栈怎么样溢出:)
- (void)stackOverflow
{
[self stackOverflow];
}
Run Code Online (Sandbox Code Playgroud)
wir*_*arr 16
最受欢迎的一个 - 无法识别的选择器崩溃:
NSObject *object = [[NSObject alloc] init];
[object performSelector:@selector(asfd)];
Run Code Online (Sandbox Code Playgroud)
确保你没有在该类中实现-asdf方法哈哈
或索引超出绑定异常:
NSArray * array = [NSArray array];
[array objectAtIndex:5];
Run Code Online (Sandbox Code Playgroud)
而且当然
kill( getpid(), SIGABRT );
bor*_*ero 10
我认为在Swift中你很容易抛出一个致命的错误:
func foo() {
fatalError("crash!")
}
Run Code Online (Sandbox Code Playgroud)
它实际上甚至打算使用此功能,以防出现问题,以使应用程序崩溃.
为了避免特殊情况下的if语句,您也可以使用precondition.它类似于 assert,因此意图(如果需要)非常清楚,并且在最终版本中没有删除assert.它用得像precondition(myBoolean, "This is a helpful error message for debugging.").
向已释放的对象发送消息
您还可以引发异常:
[NSException raise:NSInternalInconsistencyException
format:@"I want to test app crashes!."];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26396 次 |
| 最近记录: |