崩溃日志没有崩溃?

嘿,这可能是一个愚蠢的问题,但我无法find答案的任何地方,道歉,如果答案很容易find,如果我的研究技能是裤子。

无论如何,有可能生成一个崩溃报告,当一个应用程序不会崩溃? 所以说,如果用户遇到一个错误,可以有一个选项,让他们生成一个崩溃报告,然后可以发送给我? 我怎么会这样做呢?

谢谢你的帮助 :)

当我必须打印堆栈跟踪时,我已经使用了它几次:

+ (NSArray *)backtrace { void* callstack[128]; int frames = backtrace(callstack, 128); char **strs = backtrace_symbols(callstack, frames); int i; NSMutableArray *backtrace = [NSMutableArray arrayWithCapacity:frames]; for ( i = UncaughtExceptionHandlerSkipAddressCount; i < UncaughtExceptionHandlerSkipAddressCount + UncaughtExceptionHandlerReportAddressCount; i++) { [backtrace addObject:[NSString stringWithUTF8String:strs[i]]]; } free(strs); return backtrace; } 

“当一个应用程序在iPhone上崩溃时,它会在没有告诉用户发生了什么事情的情况下消失,但是可以向应用程序添加exception和信号处理,以便向用户显示错误消息,或者保存更改。甚至有可能试图从这种情况中恢复而不会崩溃。“ 看看http://cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

这是我用于我的堆栈跟踪:

  NSArray *callStackArray = [exception callStackReturnAddresses]; int frameCount = [callStackArray count]; void *backtraceFrames[frameCount]; for (int i=0; i < frameCount; i++) { backtraceFrames[i] = (void *)[[callStackArray objectAtIndex:i] unsignedIntegerValue]; } char **strs = backtrace_symbols(backtraceFrames, frameCount); NSMutableArray *backtraceArray = [NSMutableArray arrayWithCapacity:frameCount]; for (int i = 0; i < frameCount; i++) { NSString *entry = [NSString stringWithUTF8String:strs[i]]; [backtraceArray addObject:entry]; } free(strs); 

你只需要确保你不会对你的应用程序造成任何伤害: http : //landonf.bikemonkey.org/2011/09/14 。 你也可以使用PLCrashReporter来处理你所有的崩溃,或者如果你像我一样懒惰,使用像Crittercism

我曾经使用backtrace_symbols来处理我的崩溃,但后来我发现它可能是危险的,因为该方法不是asynchronous安全的。 自从我看了一堆崩溃报告解决scheme,并与我的应用程序一起使用Crittercism ,这是非常甜蜜的!

我build议你看看几天前发布的TestFlight SDK 。 它有一些很棒的function,如远程logging,甚至实时崩溃报告。

对于临时版本,您可以调用函数abort(),或抛出某种types的exception。

如果在testing过程中崩溃,app store版本将不被允许出货。