Atos没有正确地表示系统框架/库

问题是当符号化PLCrashReporter报告的堆栈跟踪地址时,不会返回实际的系统框架/库符号行。 我的应用程序行虽然显示了符号化的正确违规行。

一些配置。 我在我的OSX 10.9.5上安装了Xcode 5.1.1和Xcode 6.0.1。

使用Xcode 5.1.1并检查设备日志时,我可以看到崩溃,尽管崩溃报告中不会发生任何符号。

使用Xcode 6.0.1崩溃我的应用程序并检查设备日志,我可以看到报告符号正确。

在任何情况下,Atos都不会返回正确的Apple系统框架/库符号行。 它只返回与相应框架/库无关的垃圾。 请参阅下面的示例。

详细说明了我使用PLCrashReporter向我报告的崩溃堆栈跟踪以及与设备日志符号化报告的比较。

这是使用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 

这是使用“xcrun atos”符号化的PLCrashReported上面的堆栈跟踪:

 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 

以下是符号设备日志上面完全相同崩溃的堆栈跟踪:

 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 

您可以看到两个符号化的堆栈跟踪,首先来自PLCrashReporter堆栈跟踪,第二个来自Xcode设备日志。 我想在这一点上说,我不相信这是有问题的地址,但更多的事情与atos一起发生。 Xcode是否使用symbolicatecrash工具来表示Apple报告?

xcrun atos -arch arm64 -o MyNewPlugin.app.dSYM/Contents/Resources/DWARF/MyNewPlugin -l 0x197268000 0x000000019726ce5c命令: xcrun atos -arch arm64 -o MyNewPlugin.app.dSYM/Contents/Resources/DWARF/MyNewPlugin -l 0x197268000 0x000000019726ce5c将导致_mh_execute_header (in MyNewPlugin) + 20060这是完全错误的,它应该返回类似设备的东西日志报告_platform_memmove + 188

另一个certificate第3行问题的例子xcrun atos -arch arm64 -o MyNewPlugin.app.dSYM/Contents/Resources/DWARF/MyNewPlugin -l 0x18d5b0000 0x000000018d5f90b0 ,应该返回, UIKit 0x000000018d5f90ac -[UIApplication sendAction:to:from:forEvent:] + 96 ,而不是返回, UIKit __30-[RequestWorker logEvent:]_block_invoke (in MyNewPlugin) + 232与UIKit无关,这是我使用的内部类。

这就是我使用PLCrashReporter创建堆栈跟踪的方法。

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

编辑:在终端中使用symbolicatecrash进行非符号化的苹果崩溃报告,象征着所有系统程序集,但不是应用程序行!

答案很简单,但有时你不会在你面前看到它。

您不必使用应用程序的dSYM,而是使用设备崩溃时所拥有的iOS版本的框架。 例如,对于iOS 8.1.1的UIKit符号

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

在这里你去iOS崩溃报告:atos没有像预期的那样工作繁琐的应用程序线,但是,它必须一次只用一行。

Interesting Posts