2012-02-14 222 views
1

我遇到了一些iPhone應用程序崩潰時出現問題,當它來自背景時,它崩潰在兩個方面。iPhone應用程序崩潰時,從後臺到期後處理程序Ran

這裏是一個堆棧跟蹤:

Hardware Model: iPhone4,1 
    Process:   MyApp [11247] 
    Identifier:  MyApp 
    Code Type:  ARM (Native) 
    Parent Process: launchd [1] 
    OS Version:  iPhone OS 5.0.1 (9A406) 
    Report Version: 104 

    Exception Type: EXC_CRASH (SIGSEGV) 
    Exception Codes: 0x00000000, 0x00000000 
    Crashed Thread: 0 

    Thread 0 name: Dispatch queue: com.apple.main-thread 
    Thread 0 Crashed: 
    0 libsystem_kernel.dylib   0x30938010 0x30937000 + 4112 
    1 libsystem_kernel.dylib   0x30938206 0x30937000 + 4614 
    2 liblaunch.dylib     0x3717d114 0x37177000 + 24852 
    3 liblaunch.dylib     0x3717af4a 0x37177000 + 16202 
    4 liblaunch.dylib     0x3717affa 0x37177000 + 16378 
    5 CoreTelephony     0x37c590aa 0x37c42000 + 94378 
    6 IMAVCore      0x3713d15a 0x3711d000 + 131418 
    7 IMAVCore      0x3713d522 0x3711d000 + 132386 
    8 CoreFoundation     0x372396bc 0x371f8000 + 267964 
    9 CoreTelephony     0x37c68f3e 0x37c42000 + 159550 
    10 CoreTelephony     0x37c5929c 0x37c42000 + 94876 
    11 CoreFoundation     0x3727b0c4 0x371f8000 + 536772 
    12 libdispatch.dylib    0x33ac2d4e 0x33ac2000 + 3406 
    13 libdispatch.dylib    0x33ac4f74 0x33ac2000 + 12148 
    14 CoreFoundation     0x372842d6 0x371f8000 + 574166 
    15 CoreFoundation     0x372074d6 0x371f8000 + 62678 
    16 CoreFoundation     0x3720739e 0x371f8000 + 62366 
    17 GraphicsServices    0x313bdfc6 0x313ba000 + 16326 
    18 UIKit       0x3287973c 0x32848000 + 202556 
    19 MyApp       0x00003eae main (main.m:16) 
    20 MyApp       0x00003e6c start + 32 

    Thread 1 name: Dispatch queue: com.apple.libdispatch-manager 
    Thread 1: 
    0 libsystem_kernel.dylib   0x309383b4 0x30937000 + 5044 
    1 libdispatch.dylib    0x33ac5f74 0x33ac2000 + 16244 
    2 libdispatch.dylib    0x33ac5c92 0x33ac2000 + 15506 

    Thread 2 name: WebThread 
    Thread 2: 
    0 libsystem_kernel.dylib   0x30938010 0x30937000 + 4112 
    1 libsystem_kernel.dylib   0x30938206 0x30937000 + 4614 
    2 CoreFoundation     0x3728541c 0x371f8000 + 578588 
    3 CoreFoundation     0x37284154 0x371f8000 + 573780 
    4 CoreFoundation     0x372074d6 0x371f8000 + 62678 
    5 CoreFoundation     0x3720739e 0x371f8000 + 62366 
    6 WebCore       0x3305e128 0x32fb6000 + 688424 
    7 libsystem_c.dylib    0x31f24c16 0x31f15000 + 64534 
    8 libsystem_c.dylib    0x31f24ad0 0x31f15000 + 64208 

    Thread 3: 
    0 libsystem_kernel.dylib   0x30948cd4 0x30937000 + 72916 
    1 libsystem_c.dylib    0x31f1f30a 0x31f15000 + 41738 
    2 libsystem_c.dylib    0x31f1f09c 0x31f15000 + 41116 

    Thread 4: 
    0 libsystem_kernel.dylib   0x30938010 0x30937000 + 4112 
    1 libsystem_kernel.dylib   0x30938206 0x30937000 + 4614 
    2 CoreFoundation     0x3728541c 0x371f8000 + 578588 
    3 CoreFoundation     0x37284154 0x371f8000 + 573780 
    4 CoreFoundation     0x372074d6 0x371f8000 + 62678 
    5 CoreFoundation     0x3720739e 0x371f8000 + 62366 
    6 Foundation      0x31c8ab7e 0x31c86000 + 19326 
    7 MyApp      0x00057e7c +[XMPPStream xmppThreadMain] (XMPPStream.m:4089) 
    8 Foundation      0x31c96a8a 0x31c86000 + 68234 
    9 Foundation      0x31d2a59a 0x31c86000 + 673178 
    10 libsystem_c.dylib    0x31f24c16 0x31f15000 + 64534 
    11 libsystem_c.dylib    0x31f24ad0 0x31f15000 + 64208 

    Thread 5 name: AURemoteIO::IOThread 
    Thread 5: 
    0 libsystem_kernel.dylib   0x30938010 0x30937000 + 4112 
    1 libsystem_kernel.dylib   0x30938206 0x30937000 + 4614 
    2 AudioToolbox     0x373e048a 0x00 + 783498 
    3 AudioToolbox     0x373e40ae 0x00 + 798894 
    4 AudioToolbox     0x37322aac 0x00 + 6828 
    5 libsystem_c.dylib    0x31f24c16 0x31f15000 + 64534 
    6 libsystem_c.dylib    0x31f24ad0 0x31f15000 + 64208 

    Thread 6 name: com.apple.NSURLConnectionLoader 
    Thread 6: 
    0 libsystem_kernel.dylib   0x30938010 0x30937000 + 4112 
    1 libsystem_kernel.dylib   0x30938206 0x30937000 + 4614 
    2 CoreFoundation     0x3728541c 0x371f8000 + 578588 
    3 CoreFoundation     0x37284154 0x371f8000 + 573780 
    4 CoreFoundation     0x372074d6 0x371f8000 + 62678 
    5 CoreFoundation     0x3720739e 0x371f8000 + 62366 
    6 Foundation      0x31c96bc2 0x31c86000 + 68546 
    7 Foundation      0x31c96a8a 0x31c86000 + 68234 
    8 Foundation      0x31d2a59a 0x31c86000 + 673178 
    9 libsystem_c.dylib    0x31f24c16 0x31f15000 + 64534 
    10 libsystem_c.dylib    0x31f24ad0 0x31f15000 + 64208 

    Thread 7: 
    0 libsystem_kernel.dylib   0x30938010 0x30937000 + 4112 
    1 libsystem_kernel.dylib   0x30938206 0x30937000 + 4614 
    2 CoreFoundation     0x3728541c 0x371f8000 + 578588 
    3 CoreFoundation     0x37284154 0x371f8000 + 573780 
    4 CoreFoundation     0x372074d6 0x371f8000 + 62678 
    5 CoreFoundation     0x3720739e 0x371f8000 + 62366 
    6 Foundation      0x31c8ab7e 0x31c86000 + 19326 
    7 Foundation      0x31ca452c 0x31c86000 + 124204 
    8 MyApp       0x00070b28 +[GCDAsyncSocket listenerThread] (GCDAsyncSocket.m:6283) 
    9 Foundation      0x31c96a8a 0x31c86000 + 68234 
    10 Foundation      0x31d2a59a 0x31c86000 + 673178 
    11 libsystem_c.dylib    0x31f24c16 0x31f15000 + 64534 
    12 libsystem_c.dylib    0x31f24ad0 0x31f15000 + 64208 

    Thread 8 name: com.apple.CFSocket.private 
    Thread 8: 
    0 libsystem_kernel.dylib   0x30948570 0x30937000 + 71024 
    1 CoreFoundation     0x3728966a 0x371f8000 + 595562 
    2 libsystem_c.dylib    0x31f24c16 0x31f15000 + 64534 
    3 libsystem_c.dylib    0x31f24ad0 0x31f15000 + 64208 

    Thread 9 name: Dispatch queue: cocoa.lumberjack 
    Thread 9: 
    0 libsystem_kernel.dylib   0x30938060 0x30937000 + 4192 
    1 libdispatch.dylib    0x33ac6472 0x33ac2000 + 17522 
    2 libdispatch.dylib    0x33ac63d2 0x33ac2000 + 17362 
    3 MyApp       0x0007a3e2 +[DDLog lt_log:] (DDLog.m:922) 
    4 MyApp       0x00079158 __40+[DDLog queueLogMessage:asynchronously:]_block_invoke_0 (DDLog.m:449) 
    5 libdispatch.dylib    0x33ac2d4e 0x33ac2000 + 3406 
    6 libdispatch.dylib    0x33ac4dc0 0x33ac2000 + 11712 
    7 libdispatch.dylib    0x33ac4c56 0x33ac2000 + 11350 
    8 libdispatch.dylib    0x33ac5860 0x33ac2000 + 14432 
    9 libsystem_c.dylib    0x31f1f1c8 0x31f15000 + 41416 
    10 libsystem_c.dylib    0x31f1f09c 0x31f15000 + 41116 

    Thread 10: 
    0 libsystem_kernel.dylib   0x30948cd4 0x30937000 + 72916 
    1 libsystem_c.dylib    0x31f1f30a 0x31f15000 + 41738 
    2 libsystem_c.dylib    0x31f1f09c 0x31f15000 + 41116 

    Thread 11: 
    0 libsystem_kernel.dylib   0x30948cd4 0x30937000 + 72916 
    1 libsystem_c.dylib    0x31f1f30a 0x31f15000 + 41738 
    2 libsystem_c.dylib    0x31f1f09c 0x31f15000 + 41116 

    Thread 12 name: Dispatch queue: cocoa.lumberjack.fileLogger 
    Thread 12: 
    0 CoreFoundation     0x3723875a 0x371f8000 + 264026 
    1 Foundation      0x31cb0722 0x31c86000 + 173858 
    2 Foundation      0x31cb069a 0x31c86000 + 173722 
    3 MyApp       0x001d8510 -[MyCustomFormatter formatLogMessage:] (MyAppDelegate.m:101) 
    4 MyApp       0x0007782c -[DDFileLogger logMessage:] (DDFileLogger.m:986) 
    5 MyApp       0x0007a79e __16+[DDLog lt_log:]_block_invoke_0 (DDLog.m:916) 
    6 libdispatch.dylib    0x33ac2d4e 0x33ac2000 + 3406 
    7 libdispatch.dylib    0x33ac4dc0 0x33ac2000 + 11712 
    8 libdispatch.dylib    0x33ac4c56 0x33ac2000 + 11350 
    9 libdispatch.dylib    0x33ac5860 0x33ac2000 + 14432 
    10 libsystem_c.dylib    0x31f1f1c8 0x31f15000 + 41416 
    11 libsystem_c.dylib    0x31f1f09c 0x31f15000 + 41116 

    Thread 13: 
    0 libsystem_kernel.dylib   0x30948cd4 0x30937000 + 72916 
    1 libsystem_c.dylib    0x31f1f30a 0x31f15000 + 41738 
    2 libsystem_c.dylib    0x31f1f09c 0x31f15000 + 41116 

    Thread 14: 
    0 libsystem_kernel.dylib   0x30948cd4 0x30937000 + 72916 
    1 libsystem_c.dylib    0x31f1f30a 0x31f15000 + 41738 
    2 libsystem_c.dylib    0x31f1f09c 0x31f15000 + 41116 

    Thread 0 crashed with ARM Thread State: 
     r0: 0x00000000 r1: 0x03000003  r2: 0x000000bc  r3: 0x00000068 
     r4: 0x00000107 r5: 0x00000000  r6: 0x00000000  r7: 0x2fdfe3c8 
     r8: 0x00000000 r9: 0x00a80df8  r10: 0x03000003  r11: 0x00000000 
     ip: 0xffffffe1 sp: 0x2fdfe38c  lr: 0x3093820d  pc: 0x30938010 
     cpsr: 0x200f0010 

另一種是相似和崩潰在Thread 12-[MyCustomFormatter formatLogMessage:] (MyAppDelegate.m:101)

這裏是- (NSString *)formatLogMessage:(DDLogMessage *)logMessage的代碼:

NSString *logLevel; 
    switch (logMessage->logFlag) { 
     case LOG_FLAG_ERROR : logLevel = @"[E]"; break; 
     case LOG_FLAG_WARN : logLevel = @"[W]"; break; 
     case LOG_FLAG_INFO : logLevel = @"[I]"; break; 
     default    : logLevel = @"[V]"; break; 
    } 
    /*line 100*/ 
    /*line 101*/ NSString *dateAndTime = [dateFormatter stringFromDate:(logMessage->timestamp)]; 
    /*line 102*/ 
    NSString *logMsg = logMessage->logMsg; 

    NSString *fileName = [NSString stringWithCString:logMessage->file encoding:[NSString defaultCStringEncoding]]; 

    NSString *function = [NSString stringWithCString:logMessage->function encoding:[NSString defaultCStringEncoding]]; 

    return [NSString stringWithFormat:@"%@ - %@ (%@ - %@) | %@\n", logLevel, dateAndTime, fileName, function, logMsg]; 

dateFormatter被初始化在MyCustomFormatter init

- (id)init 
    { 
     if((self = [super init])) 
     { 
      self.dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
      [dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
      [dateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss:SSS"]; 
     } 
     return self; 
    } 

而且其界面如下:

@interface MyCustomFormatter : NSObject <DDLogFormatter> 
    {  
     NSDateFormatter *dateFormatter; 
    } 

    @property (nonatomic, retain) NSDateFormatter *dateFormatter; 

    @end 

我的應用程序委託- (void)applicationWillResignActive:(UIApplication *)application代碼如下所示:

self.bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 

    DDLogInfo(@"Ending bg task in expiration handler"); 
    //TODO: remove after tests 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:66]; 

    [[XMPP instance] disconnect]; 

    [app endBackgroundTask:self.bgTask]; 

    self.bgTask = UIBackgroundTaskInvalid; 

    }]; 


    // Start the long-running task and return immediately. 

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

     // Do the work associated with the task. 

     sleep(600); 

     if(self.bgTask != UIBackgroundTaskInvalid){ 
      //TODO: remove after tests 
      [[UIApplication sharedApplication] setApplicationIconBadgeNumber:99]; 

      DDLogInfo(@"Disconnecting from XMPP in bg task after waited in bg"); 
      [[XMPP instance] disconnect]; 

      [app endBackgroundTask:self.bgTask]; 

      self.bgTask = UIBackgroundTaskInvalid; 
     } 

    }); 

而且- (void)applicationWillEnterForeground:(UIApplication *)application

DDLogVerbose(@"ApplicationWillEnterForeground:"); 
    if(self.bgTask != UIBackgroundTaskInvalid){ 
     [[UIApplication sharedApplication] endBackgroundTask:self.bgTask]; 
     self.bgTask = UIBackgroundTaskInvalid; 
    } 
    else { 
     [[XMPP instance] connect]; 
    } 

我爲了知道我設置了徽章如果應用程序仍在運行或未運行,以及它是如何停止的,並且注意到應用程序在從後臺打開時僅會出現徽章66

任何幫助,將不勝感激。

在此先感謝。

+0

你才能找到問題的嘗試呢?對你的崩潰文件進行符號化,然後查看代碼,設置斷點,逐步瀏覽並查看你能找到的內容? – 2012-02-14 13:49:48

+0

嘗試用符號表示崩潰報告。這些二進制索引不會幫助我們 – basvk 2012-02-14 14:07:51

+0

謝謝,我試圖做到這一點,但我的Xcode 4.2不符號化系統符號。我已經搜索並嘗試了一些東西來嘗試解決這個問題。在能夠符號化系統符號時將進行編輯 – ZeCodea 2012-02-14 15:51:01

回答

1

看來問題是與不是線程安全的是被我的三個記錄器同時使用的日期格式,請參閱SO question