How can we store crash logs in iOS application [du

2019-06-13 20:10发布

This question already has an answer here:

We can store normal logs to file but when application crashes then how to store the cause of crash in file.So we can able to know the cause. How can we store crash logs in iOS application.

1条回答
疯言疯语
2楼-- · 2019-06-13 20:41

in main.m file

 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;

}
查看更多
登录 后发表回答