0

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

4

1 回答 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 回答