2014-09-27 14 views
9

Das Problem besteht darin, dass bei der Symbolisierung der Stacktrace-Adressen die von PLCrashReporter gemeldet werden nicht die tatsächliche System Frameworks/Bibliotheken symbolisierte Zeile zurückgibt. Meine Anwendungszeile zeigt jedoch die korrekte symbolische Zeile an.Atos symbolisiert System-Frameworks/Bibliotheken nicht richtig

Einige Konfiguration. Ich habe auf meinem OSX 10.9.5 den Xcode 5.1.1 und Xcode 6.0.1 installiert.

Wenn ich mit dem Xcode 5.1.1 arbeite und das Geräteprotokoll überprüfe, kann ich die Abstürze erkennen, obwohl im Absturzbericht keine Symbolisierung stattfinden kann.

Mit Xcode 6.0.1 Absturz meiner App und untersuchen Sie das Geräteprotokoll kann ich den Bericht ordnungsgemäß symbolisiert sehen.

Atos liefert in jedem Fall nicht die korrekte Apple-System-Frameworks/Bibliotheken symbolisierte Zeile. Es gibt nur Garbages zurück, Klassen, die nichts mit dem entsprechenden Framework/der Bibliothek zu tun haben. Siehe unten für Beispiele.

Im Detail, was ich tun, um meine Crash-Stacktrace zu symbolisieren berichtet mir den PLCrashReporter und den Vergleich mit dem Gerät Protokoll symbolisierten Bericht. Hier

ist die Stacktrace mit berichtete die PLCrashReporter unsymbolicated:

0 libsystem_platform.dylib 0x000000019726ce5c 0x197268000 + 20060 
1 libsystem_c.dylib 0x00000001971253e0 0x197124000 + 5088 
2 MyNewPlugin 0x000000010003ac70 0x10002c000 + 60528 
3 UIKit 0x000000018d5f90b0 0x18d5b0000 + 299184 
4 UIKit 0x000000018d5f9044 0x18d5b0000 + 299076 
5 UIKit 0x000000018d5e2520 0x18d5b0000 + 206112 
6 UIKit 0x000000018d5f8a44 0x18d5b0000 + 297540 
7 UIKit 0x000000018d5f86d8 0x18d5b0000 + 296664 
8 UIKit 0x000000018d5f3370 0x18d5b0000 + 275312 
9 UIKit 0x000000018d5c4b50 0x18d5b0000 + 84816 
10 UIKit 0x000000018d5c2c40 0x18d5b0000 + 76864 
11 CoreFoundation 0x000000018a5bb7f4 0x18a4f0000 + 833524 
12 CoreFoundation 0x000000018a5bab50 0x18a4f0000 + 830288 
13 CoreFoundation 0x000000018a5b8de8 0x18a4f0000 + 822760 
14 CoreFoundation 0x000000018a4f9dd0 0x18a4f0000 + 40400 
15 GraphicsServices 0x00000001901e1c0c 0x1901d4000 + 56332 
16 UIKit 0x000000018d62afc4 0x18d5b0000 + 503748 
17 MyNewPlugin 0x0000000100041944 0x10002c000 + 88388 
18 libdyld.dylib 0x00000001970f7aa0 0x1970f4000 + 15008 

Hier ist die stacktrace oben ist aus PLCrashReported symbolicated mit "xcrun atos":

0 libsystem_platform.dylib _mh_execute_header (in MyNewPlugin) + 20060 
1 libsystem_c.dylib _mh_execute_header (in MyNewPlugin) + 5088 
2 MyNewPlugin -[SLKViewController causeBadAddress:] (in MyNewPlugin) (SLKViewController.m:175) + 60528  
3 UIKit __30-[RequestWorker logEvent:]_block_invoke (in MyNewPlugin) + 232 
4 UIKit __30-[RequestWorker logEvent:]_block_invoke (in MyNewPlugin) + 124 
5 UIKit +[SSNetworkInfo cellMACAddress] (in MyNewPlugin) (SSNetworkInfo.m:0)  
6 UIKit __copy_helper_block_234 (in MyNewPlugin) + 100 
7 UIKit -[RequestWorker logEventAsyncWithName:logLevel:andCompletionBlock:] (in MyNewPlugin) + 992 
8 UIKit -[ErrorResponse setData:] (in MyNewPlugin) + 56 
9 UIKit +[SSProcessInfo processStatus] (in MyNewPlugin) (SSProcessInfo.m:97)  
10 UIKit +[JSONModel(Networking) postModel:toURLWithString:completion:] (in MyNewPlugin) (JSONModel+networking.m:107)  
11 CoreFoundation __55+[SPLJSONKeyMapper mapperFromUnderscoreCaseToCamelCase]_block_invoke_2 (in MyNewPlugin) + 1132 
12 CoreFoundation __destroy_helper_block_17 (in MyNewPlugin) + 44 
13 CoreFoundation -[RequestWorker sendUnhandledRequestAsync:andResultBlock:] (in MyNewPlugin) + 240 
14 CoreFoundation +[SSApplicationInfo clipboardContent] (in MyNewPlugin) (SSApplicationInfo.m:49) 
15 GraphicsServices __47-[SLKViewController logExceptionSynchronously:]_block_invoke (in MyNewPlugin) (SLKViewController.m:92) + 56332 
16 UIKit -[DeviceInfo appendInfo] (in MyNewPlugin) + 1192  
17 MyNewPlugin main (in MyNewPlugin) (main.m:16) + 88388 
18 libdyld.dylib _mh_execute_header (in MyNewPlugin) + 15008 

Hier ist die Stacktrace der oben gleichen genauer Absturz aus dem Geräteprotokoll symbolisiert:

0 libsystem_platform.dylib  0x000000019726ce5c _platform_memmove + 188 
1 libsystem_c.dylib    0x00000001971253dc strcpy + 40 
2 MyNewPlugin      0x000000010003ac6c -[SLKViewController causeBadAddress:] (SLKViewController.m:174) 
3 UIKit       0x000000018d5f90ac -[UIApplication sendAction:to:from:forEvent:] + 96 
4 UIKit       0x000000018d5f9040 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 20 
5 UIKit       0x000000018d5e251c -[UIControl _sendActionsForEvents:withEvent:] + 372 
6 UIKit       0x000000018d5f8a40 -[UIControl touchesEnded:withEvent:] + 580 
7 UIKit       0x000000018d5f86d4 -[UIWindow _sendTouchesForEvent:] + 688 
8 UIKit       0x000000018d5f336c -[UIWindow sendEvent:] + 1168 
9 UIKit       0x000000018d5c4b4c -[UIApplication sendEvent:] + 252 
10 UIKit       0x000000018d5c2c3c _UIApplicationHandleEventQueue + 8496 
11 CoreFoundation     0x000000018a5bb7f0 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 20 
12 CoreFoundation     0x000000018a5bab4c __CFRunLoopDoSources0 + 252 
13 CoreFoundation     0x000000018a5b8de4 __CFRunLoopRun + 628 
14 CoreFoundation     0x000000018a4f9dcc CFRunLoopRunSpecific + 448 
15 GraphicsServices    0x00000001901e1c08 GSEventRunModal + 164 
16 UIKit       0x000000018d62afc0 UIApplicationMain + 1152 
17 MyNewPlugin      0x0000000100041940 main (main.m:16) 
18 libdyld.dylib     0x00000001970f7a9c start + 0 

Sie können die zwei symbolisierten Stacktraces zuerst von PLCrashReporter stacktrace und zweitens vom Xcode-Geräteprotokoll sehen. Ich möchte an dieser Stelle sagen, dass ich nicht glaube, dass es die Adressen sind, die das Problem haben, sondern dass etwas mehr mit Atos vor sich geht. Verwendet Xcode das Tool symbolicatecrash, um den Apple-Bericht zu symbolisieren?

Der atos Befehl: xcrun atos -arch arm64 -o MyNewPlugin.app.dSYM/Contents/Resources/DWARF/MyNewPlugin -l 0x197268000 0x000000019726ce5c wird zu _mh_execute_header (in MyNewPlugin) + 20060 führen, was völlig falsch ist und es sollte etwas wie den Geräteprotokollbericht _platform_memmove + 188 zurückgeben.

Ein weiteres Beispiel atos 3. xcrun atos -arch arm64 -o MyNewPlugin.app.dSYM/Contents/Resources/DWARF/MyNewPlugin -l 0x18d5b0000 0x000000018d5f90b0, das Problem für Zeile beweisen zurückkehren sollte, UIKit 0x000000018d5f90ac -[UIApplication sendAction:to:from:forEvent:] + 96, stattdessen zurückgibt, UIKit __30-[RequestWorker logEvent:]_block_invoke (in MyNewPlugin) + 232, die nichts mit UIKit zu tun hat, dann ist dies eine interne Klasse I verwenden.

So erstelle ich die Zeilen des Stacktrace mit PLCrashReporter.

[NSString stringWithFormat:@"%-4ld%@ 0x0000000%" PRIx64 " 0x%" PRIx64 " + %" PRId64 "", (long)frameIndex, imageName, frameInfo.instructionPointer, baseAddress, pcOffset]; 

EDIT: im Terminal für den unsymbolicated Apfel Crash-Bericht alle System Mit symbolicatecrash Baugruppen ist symbolicating aber nicht die Anwendung Linien !!!

+0

Haben Sie jemals Ihr Problem gelöst? – Locksleyu

+0

Nein, leider habe ich nicht, Atos ist nur nutzlos oder ich vermisse Informationen über den Einsatz, wo ich nirgendwo finden kann! –

Antwort

12

Die Antwort war so einfach, aber manchmal sieht man sie nicht vor sich.

Anstatt den dSYM der Anwendung zu verwenden, verwenden Sie das Framework der iOS-Version, die das Gerät beim Absturz hat. z.B. für die UIKit-Symbole von iOS 8.1.1

xcrun atos -arch arm64 -o ~/Bibliothek/Entwickler/Xcode/iOS DeviceSupport/8.1.1 (12B436) /Symbols/System/Library/Frameworks/UIKit.framework/UIKit -l 0x18d5b0000 0x000000018d5f90b0

+0

Hallo, @george-taskos kannst du eine Anleitung zum symbolisieren eines Stacktrace geben, der mit NSSetUncaughtExceptionHandler erhalten wurde. Hier ist mein [post] (http: // stackoverflow com/questions/34664162/how-to-the-line-of-the-crash-und-die-methode-wie-crashlytics-tut-und-auch-die) danke für jede Beratung im Voraus und stimmen auf für diesen Beitrag –

1

hier ya gehen iOS crash reports: atos not working as expected für die Anwendung Linien mühsam es ist jedoch, haben durch eine einzige Linie zu einer Zeit, zu gehen.

+0

Ich habe diese Antwort gesehen, es ist theoretisch der richtige Ansatz, aber es funktioniert nicht, gibt die gleichen Ergebnisse zurück, als ob Sie das Flag -l verwendet haben, indem Sie die zwei Adressen der Stacktrace-Zeile übergeben. Nur noch einmal getestet und das gleiche falsche Ergebnis für System oder andere Bibliotheken/Frameworks erhalten. Danke für die Antwort. –

+0

naja, sieht so aus, als müsstest du Apple doch noch nerven, um das wieder zu beheben. und drücke die Daumen, dass sie den neuen Fehler in bugreporter.apple.com nicht ignorieren. –