【问题标题】:How can we store crash logs in iOS application [duplicate]我们如何在iOS应用程序中存储崩溃日志[重复]
【发布时间】:2013-05-31 07:48:49
【问题描述】:

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

【问题讨论】:

  • 考虑使用崩溃报告服务,如 Crashlytics 或 Crittercism。

标签: ios objective-c logging crash


【解决方案1】:

在 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 和其他此类崩溃。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多