2012-10-31 2 views
12

Gli utenti mi inviano tramite email stack stack quando la mia app si arresta in modo anomalo sul proprio dispositivo. Prima di iOS 6 che si presentava così:Nome del metodo di traccia di stack redatto

CRASH: NSInvalidArgumentException (*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil) 

TRACE: (
0 CoreFoundation      0x355e58a7 __exceptionPreprocess + 186 
1 libobjc.A.dylib      0x3798c259 objc_exception_throw + 32 
2 CoreFoundation      0x3553a1d7 -[__NSArrayM insertObject:atIndex:] + 186 
3 MYAPP        0x0006c0f7 MYAPP + 188663 
4 MYAPP        0x000652a3 MYAPP + 160419 
5 Foundation       0x3512ac29 __65-[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:]_block_invoke_0 + 16 
6 Foundation       0x350826d9 -[NSURLConnectionInternalConnection invokeForDelegate:] + 28 
7 Foundation       0x350826a3 -[NSURLConnectionInternal _withConnectionAndDelegate:onlyActive:] + 198 
8 Foundation       0x350825c5 -[NSURLConnectionInternal _withActiveConnectionAndDelegate:] + 60 
9 CFNetwork       0x34de77f5 _ZN19URLConnectionClient23_clientDidFinishLoadingEPNS_26ClientConnectionEventQueueE + 192 
10 CFNetwork       0x34ddc4a5 _ZN19URLConnectionClient26ClientConnectionEventQueue33processAllEventsAndConsumePayloadEP20XConnectionEventInfoI12XClientEvent18XClientEventParamsEl + 424 
11 CFNetwork       0x34ddc1a3 _ZN19URLConnectionClient13processEventsEv + 106 
12 CFNetwork       0x34ddc0d9 _ZN17MultiplexerSource7performEv + 156 
13 CoreFoundation      0x355b9ad3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 14 
14 CoreFoundation      0x355b929f __CFRunLoopDoSources0 + 214 
15 CoreFoundation      0x355b8045 __CFRunLoopRun + 652 
16 CoreFoundation      0x3553b4a5 CFRunLoopRunSpecific + 300 
17 CoreFoundation      0x3553b36d CFRunLoopRunInMode + 104 
18 GraphicsServices     0x371d7439 GSEventRunModal + 136 
19 UIKit        0x33047cd5 UIApplicationMain + 1080 
20 MYAPP        0x0003fbcf MYAPP + 7119 
21 MYAPP        0x0003fb84 MYAPP + 7044 
) 

Dalle ecc nomi dei metodi CoreFoundation e chiede all'utente quello che è successo, posso ottenere una buona idea di dove l'incidente è accaduto.

Tuttavia, dal momento che iOS 6 è stato rilasciato, i miei rapporti di crash tutte le simile a questa:

CRASH: NSRangeException (*** -[__NSArrayI objectAtIndex:]: index 2147483670 beyond bounds [0 .. 11]) 

TRACE: (
0 CoreFoundation      0x3a3872bb <redacted> + 186 
1 libobjc.A.dylib     0x32ca697f objc_exception_throw + 30 
2 CoreFoundation      0x3a2d1e8d <redacted> + 164 
3 MYAPP        0x000ff721 MYAPP + 214817 
4 MYAPP        0x000e8999 MYAPP + 121241 
5 UIKit        0x372f60ad <redacted> + 72 
6 UIKit        0x372f605f <redacted> + 30 
7 UIKit        0x372f603d <redacted> + 44 
8 UIKit        0x372f58f3 <redacted> + 502 
9 UIKit        0x372e1287 <redacted> + 526 
10 UIKit        0x37373f3d <redacted> + 748 
11 UIKit        0x3721e52b <redacted> + 318 
12 UIKit        0x3720b809 <redacted> + 380 
13 UIKit        0x3720b123 <redacted> + 6154 
14 GraphicsServices     0x362085a3 <redacted> + 590 
15 GraphicsServices     0x362081d3 <redacted> + 34 
16 CoreFoundation     0x3a35c173 <redacted> + 34 
17 CoreFoundation     0x3a35c117 <redacted> + 138 
18 CoreFoundation     0x3a35af99 <redacted> + 1384 
19 CoreFoundation     0x3a2cdebd CFRunLoopRunSpecific + 356 
20 CoreFoundation     0x3a2cdd49 CFRunLoopRunInMode + 104 
21 GraphicsServices     0x362072eb GSEventRunModal + 74 
22 UIKit        0x3725f301 UIApplicationMain + 1120 
23 MYAPP        0x000ccbd3 MYAPP + 7123 
24 MYAPP        0x000ccb88 MYAPP + 7048 
) 

ottengo l'analisi dello stack da qui, che all'utente viene richiesto di e-mail quando l'applicazione viene riaperto:

void uncaughtExceptionHandler(NSException *exception) { 
    //make a file name to write the data to using the documents directory: 
    NSString *fileName = [NSString stringWithFormat:@"%@/crashlog.txt", documentsDirectory]; 
    //create content - four lines of text 
    NSString *content = [NSString stringWithFormat:@"CRASH: %@ (%@)\n\nTRACE: %@", [exception name], [exception reason], [exception callStackSymbols]]; 
    //save content to the documents directory 
    [content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil]; 
} 

Senza i nomi dei metodi, questo è peggio che inutile. C'è un modo per riportare questi nomi di metodi nelle tracce dello stack? Questa è una configurazione di rilascio, non di debug.

EDIT:

Ho seguito le istruzioni riportate in this answer.

sto estrazione dei file .app e .dSYM dal pacchetto .xcarchive e funzionante atos -arch armv7 -o 'MyApp.app'/'MyApp'

nomi dei metodi Comunque, sto ancora non ottenere da atos.

+0

Lo stesso problema in iOS 6.1 – malhal

+0

Followup - Non l'ho mai fatto funzionare, quindi ho abbandonato l'invio via e-mail dei rapporti sugli arresti anomali e ora sto usando QuincyKit - un molto soluzione migliore – colincameron

risposta

1

Avete installato qualche beta di iOS 6, per caso? Mi sono imbattuto in questo stesso problema.

Questo question mi ha aiutato.

+1

Grazie per la risposta, ma questo è un problema leggermente diverso. Il registro degli arresti anomali è rappresentato sul dispositivo dell'utente, non sul mio Mac di sviluppo. Posso simbolicare i registri di arresti anomali sul mio Mac provenienti dal dispositivo di un utente e non da iTunes? – colincameron

+0

Puoi simbolizzare finchè hai il dSym della build dal dispositivo dell'utente. Il processo è probabilmente cambiato da quando Xcode è diventato un'app corretta, ma probabilmente ci sono tutorial su come farlo tramite Google. – ageektrapped