0
我們可以將常規日誌存儲到文件中,但是當應用程序崩潰時如何將崩潰的原因存儲在文件中。因此我們可以知道原因。 我們如何在iOS應用程序中存儲崩潰日誌。我們如何在iOS應用程序中存儲崩潰日誌
我們可以將常規日誌存儲到文件中,但是當應用程序崩潰時如何將崩潰的原因存儲在文件中。因此我們可以知道原因。 我們如何在iOS應用程序中存儲崩潰日誌。我們如何在iOS應用程序中存儲崩潰日誌
在main.m文件
int main(int argc, char *argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
// int retVal = UIApplicationMain(argc, argv, nil, nil);
// [pool release];
// return retVal;
int retVal;
@try
{
retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([SRSPoulinsAppAppDelegate class]));
}
@catch (NSException *exception)
{
NSLog(@"CRASH: %@", exception);
// NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
NSString *BugFileName = @"BugTracker.txt";
// Check if the SQL database has already been saved to the users phone, if not then copy it over
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:BugFileName];
// Check if the database has already been created in the users filesystem
success = [fileManager fileExistsAtPath:writableDBPath];
// If the database already exists then return without doing anything
if(success)
{
NSString *error = [NSString stringWithFormat:@"%@",exception ];
NSString *errorDesc = [error stringByAppendingString:[NSString stringWithFormat:@"\n%@",[exception callStackSymbols]]];
NSFileHandle *fileHandler = [NSFileHandle fileHandleForUpdatingAtPath:writableDBPath];
[fileHandler seekToEndOfFile];
[fileHandler writeData:[errorDesc dataUsingEncoding:NSUTF8StringEncoding]];
[fileHandler closeFile];
}
else
{
writableDBPath = [documentsDirectory stringByAppendingPathComponent:BugFileName];
//create file if it doesn't exist
if(![[NSFileManager defaultManager] fileExistsAtPath:writableDBPath])
{
[[NSFileManager defaultManager] createFileAtPath:writableDBPath contents:nil attributes:nil];
}
//append text to file (you'll probably want to add a newline every write)
NSString *error = [NSString stringWithFormat:@"%@",exception ];
NSString *errorDesc = [error stringByAppendingString:[NSString stringWithFormat:@"\n%@",[exception callStackSymbols]]];
NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath:writableDBPath];
[file seekToEndOfFile];
[file writeData:[errorDesc dataUsingEncoding:NSUTF8StringEncoding]];
[file closeFile];
}
// [request setDidFinishSelector:@selector(requestFinished:)];
//[request setDidFailSelector:@selector(requestFailed:)];
}
@finally
{
}
return retVal;
}
請注意,這隻適用於Obj-C異常。不EXC_BAD_ACCESS和其他此類崩潰。 – Mar0ux
考慮使用像Crashlytics或Crittercism崩潰記者服務。 – Mar0ux