2012-10-31 13 views
12

Mam użytkowników wysyłających mi e-maile ze stosu, gdy moja aplikacja ulega awarii na ich urządzeniu. Przed iOS 6 wyglądały tak:Nazwy metod śledzenia stosu redagowane

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 
) 

Od etc nazwy metody CoreFoundation i prosząc użytkownika, co się stało, można uzyskać całkiem dobry pomysł, gdzie katastrofy stało.

Jednak od iOS 6 został wydany, moje raporty o awariach wszystkie wyglądają tak:

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 
) 

uzyskać ślad stosu stąd, których użytkownik jest proszony o e-maila, gdy aplikacja jest ponownie otwarty:

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]; 
} 

Bez nazw metod jest to gorsze niż bezużyteczne. Czy istnieje sposób na przywrócenie nazw tych metod do moich śladów stosu? To jest konfiguracja wydania, a nie debugowanie.

EDIT:

Śledzę z instrukcjami w this answer.

ja wyodrębnieniu .app i .dSYM plików z pakietu .xcarchive i działa atos -arch armv7 -o 'MyApp.app'/'MyApp'

Jednak ja wciąż nie nazwy metod z atos.

+0

Ten sam problem w iOS 6.1 – malhal

+0

Kontynuacja - Nigdy nie udało mi się to uruchomić, więc porzuciłem wysyłanie e-maili z raportów o awariach i teraz używam QuincyKit - dużo lepsze rozwiązanie. – colincameron

Odpowiedz

1

Czy masz przypadkowo zainstalowane jakieś bety iOS 6? Wpadłem na ten sam problem.

Pomogło mi to question.

+1

Dziękuję za odpowiedź, ale jest to nieco inny problem. Dziennik awarii jest symbolizowany na urządzeniu użytkownika, a nie na moim Macintosh. Czy mogę oznaczyć dzienniki awarii na moim komputerze Mac, które pochodzą z urządzenia użytkownika, a nie z połączenia z iTunes? – colincameron

+0

Możesz symbolizować tak długo, jak masz dSym kompilacji z urządzenia użytkownika. Proces najprawdopodobniej się zmienił, ponieważ Xcode stał się odpowiednią aplikacją, ale istnieją prawdopodobnie tutoriale, jak to zrobić za pośrednictwem Google. – ageektrapped

Powiązane problemy