如何在iOS应用中存储崩溃日志?



我们可以将正常的日志存储到文件中,但是当应用程序崩溃时,如何将崩溃的原因存储到文件中。这样我们就能知道原因了。如何在iOS应用程序中存储崩溃日志

in 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;
}

最新更新