我们可以将正常日志存储到文件中,但是当应用程序崩溃时,如何将崩溃的原因存储在文件中。这样我们就可以知道原因。我们如何在 iOS 应用程序中存储崩溃日志。
问问题
442 次
1 回答
0
在 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;
}
于 2013-05-31T07:54:34.343 回答