为什么xcode显示源文件,而“由于未捕获的异常终止应用程序”?

时间:2016-10-28 09:06:49

标签: ios xcode debugging

2016-10-28 16:59:42.288 HuaYang[16997:681263] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[HYNewGiftInfoModel id]: unrecognized selector sent to instance 0x6080000f8200'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010efa834b __exceptionPreprocess + 171
    1   libobjc.A.dylib                     0x000000010dfb821e objc_exception_throw + 48
    2   CoreFoundation                      0x000000010f017f34 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
    3   CoreFoundation                      0x000000010ef2dc15 ___forwarding___ + 1013
    4   CoreFoundation                      0x000000010ef2d798 _CF_forwarding_prep_0 + 120
    5   HuaYang                             0x000000010abdecdb HuaYang + 4332763
    6   HuaYang                             0x000000010ab7a99e HuaYang + 3922334
    7   UIKit                               0x0000000111d5edd0 -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:isFocused:notify:] + 467
    8   UIKit                               0x0000000111d5ebf7 -[UICollectionView _createPreparedCellForItemAtIndexPath:withLayoutAttributes:applyAttributes:] + 35
    9   UIKit                               0x0000000111d640cf -[UICollectionView _updateVisibleCellsNow:] + 4803
    10  UIKit                               0x0000000111d69d63 -[UICollectionView layoutSubviews] + 313
    11  UIKit                               0x00000001114e1344 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1237
    12  QuartzCore                          0x000000011115ccdc -[CALayer layoutSublayers] + 146
    13  QuartzCore                          0x00000001111507a0 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 366
    14  QuartzCore                          0x000000011115061e _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 24
    15  QuartzCore                          0x00000001110de62c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 280
    16  QuartzCore                          0x000000011110b713 _ZN2CA11Transaction6commitEv + 475
    17  UIKit                               0x0000000111416067 _UIApplicationFlushRunLoopCATransactionIfTooLate + 206
    18  UIKit                               0x0000000111c25b30 __handleEventQueue + 5672
    19  CoreFoundation                      0x000000010ef4d311 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
    20  CoreFoundation                      0x000000010ef32517 __CFRunLoopDoSources0 + 423
    21  CoreFoundation                      0x000000010ef31a86 __CFRunLoopRun + 918
    22  CoreFoundation                      0x000000010ef31494 CFRunLoopRunSpecific + 420
    23  GraphicsServices                    0x0000000113b50a6f GSEventRunModal + 161
    24  UIKit                               0x000000011141cf34 UIApplicationMain + 159
    25  HuaYang                             0x000000010a9514cf HuaYang + 1656015
    26  libdyld.dylib                       0x0000000112db968d start + 1

5 HuaYang 0x000000010abdecdb HuaYang + 4332763

我自己的代码没有函数名,而系统库有。 我的应用程序崩溃时是否需要打开以显示符号的xcode构建开关?

2 个答案:

答案 0 :(得分:2)

enter image description here

您可以选择" Exception Breakpoint ..."在“断点”面板中,然后选择"所有例外"。

答案 1 :(得分:2)

分析来自apple的崩溃报告的步骤:

  1. 将推送到appstore的.app文件复制,发布时创建的.dSYM文件,以及从APPLE收到的崩溃报告到 FOLDER 。 / p>

  2. 打开终端应用程序并转到上面创建的文件夹(使用cd命令)

  3. 运行atos -arch armv7 -o APPNAME.app/APPNAME MEMORY_LOCATION_OF_CRASH。内存位置应该是应用程序根据报告崩溃的位置。

  4. 例如:atos -arch armv7 -o 'APPNAME.app'/'APPNAME' 0x0003b508

    这会显示导致崩溃的确切行,方法名称。

    例如:[classname functionName:]; -510

    符号化IPA

    如果我们使用IPA进行符号化 - 只需使用.zip重命名扩展名.ipa,然后将其解压缩,然后我们就可以获得包含app的Payload文件夹。在这种情况下,我们不需要.dSYM文件。

    注意

    这仅适用于app二进制文件没有剥离符号的情况。默认情况下,发布版本剥离了符号。我们可以在项目构建设置“将复制期间的调试符号”中更改为NO。

    更多详细信息,请参阅此post