Atos не символизирует системные рамки/библиотеки должным образом

Проблема заключается в том, что при символизации адресов stacktrace, о которых сообщает PLCrashReporter, не возвращается символическая строка фактических системных фреймворков/библиотек. Моя строка приложения покажет правильную символическую линию.

Некоторая конфигурация. У меня на моем OSX 10.9.5 установлены Xcode 5.1.1 и Xcode 6.0.1.

При работе с Xcode 5.1.1 и проверке журнала устройства я вижу сбои, хотя в отчете о сбое не может быть никакой символики.

Используя Xcode 6.0.1, сбой моего приложения и проверку журнала устройства, я вижу, что отчет символизирован правильно.

Atos ни в коем случае не возвращает правильную символическую линию фреймворков/библиотек Apple. Он просто возвращает мусор, классы, которые не имеют никакого отношения к соответствующей структуре/библиотеке. Ниже приведены примеры.

Подробно о том, что я делаю, чтобы символизировать мой стек crash stacktrace, сообщил мне, используя PLCrashReporter, и сравнивая его с символическим отчетом журнала устройства.

Ниже приведено описание stacktrace с использованием unsymbolicated PLCrashReporter:

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

Вот вышеописанная stacktrace из PLCrashReported, символизируемая с помощью "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

Вот стоп-тракт вышеописанного точного сбоя от символа устройства:

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

Вы можете увидеть две символизированные стеки стека, сначала из stackrrace от PLCrashReporter, и вторую из журнала устройств Xcode. Я хотел бы в этом пункте сказать, что я не верю в то, что у адресов есть проблема, но что-то происходит с atos. Является ли Xcode инструментом symbolicatecrash, чтобы символизировать отчет Apple?

Команда atos: xcrun atos -arch arm64 -o MyNewPlugin.app.dSYM/Contents/Resources/DWARF/MyNewPlugin -l 0x197268000 0x000000019726ce5c приведет к ошибке _mh_execute_header (in MyNewPlugin) + 20060, которая является полностью неправильной, и она должна вернуть что-то вроде отчета журнала устройства _platform_memmove + 188.

Еще один пример, чтобы доказать проблему для строки 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, это внутренний класс, который я использую.

Вот как я создаю строки stacktrace, используя PLCrashReporter.

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

EDIT: Использование symbolicatecrash в терминале для отчета о сбоях unsymbolicated apple crash символизирует все системные сборки, но не строки приложения!!!

Ответ 1

Ответ был таким простым, но иногда вы не видите его перед собой.

Вместо использования приложения dSYM вы используете фреймворк версии iOS, который имеет устройство при сбое. например для символов UIKit iOS 8.1.1

xcrun atos -arch arm64 -o ~/Library/Разработчик/Xcode/iOS DeviceSupport/8.1.1 (12B436)/Symbols/System/Library/Frameworks/UIKit.framework/UIKit -l 0x18d5b0000 0x000000018d5f90b0