【问题标题】:SIGABRT doesn't show stack trace in iOS 5 simulatorSIGABRT 在 iOS 5 模拟器中不显示堆栈跟踪
【发布时间】:2011-12-12 13:54:21
【问题描述】:

使用 iOS 5 在 iPad 模拟器中运行我的应用程序时,如果出现 SIGABRT 错误,它不会像在 iOS 4.3 中那样显示完整的堆栈跟踪

此外,调试器不会停在发生错误的行,而是停在应用程序的 main 方法中。

这使得找到问题变得更加困难......

有谁知道如何使 iOS 5 的行为与 4.3 中的一样?有可能吗?

这就是 iOS 5 显示的内容

2011-10-21 10:45:18.528 KBNavigator[9283:17603] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull doubleValue]: unrecognized selector sent to instance 0x2b4ccd8'
*** First throw call stack:
(0x2ab6052 0x28d6d0a 0x2ab7ced 0x2a1cf00 0x2a1cce2 0x14ff1c 0x14e93c 0x10cdf1 0x105c88 0x133b40 0x135935 0x1532548 0x1534722 0x13e47c7 0x13e42c1 0xd1e3d66 0x13e728c 0x13e72b8 0x13e79ab 0x13ec288 0xd1e3ece 0xb5262 0xcf55f 0xb72c3 0x141d64e 0x141cc1c 0x144356d 0x142dd47 0x1444441 0x14444f9 0x163bc68 0x13fb4a1 0x13fc12b 0x163b4c7 0x1424427 0x142458c 0xd1fe280 0x14245cc 0xecdaf 0xf14e2 0xecb9d 0xd5d0e 0x135e88 0x107098 0x12d870 0x2ab7ec9 0x135a5c2 0x135a55a 0x13ffb76 0x140003f 0x13ff2fe 0x137fa30 0x137fc56 0x1366384 0x1359aa9 0x28b9fa9 0x2a8a1c5 0x29ef022 0x29ed90a 0x29ecdb4 0x29ecccb 0x28b8879 0x28b893e 0x1357a9b 0x18656 0x2be5 0x1)
terminate called throwing an exception

这是针对 iOS 4.3 的

2011-10-21 10:46:40.066 KBNavigator[9381:14003] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull doubleValue]: unrecognized selector sent to instance 0x20d15e8'
*** Call stack at first throw:
(
0   CoreFoundation                      0x020645a9 __exceptionPreprocess + 185
1   libobjc.A.dylib                     0x021b8313 objc_exception_throw + 44
2   CoreFoundation                      0x020660bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3   CoreFoundation                      0x01fd5966 ___forwarding___ + 966
4   CoreFoundation                      0x01fd5522 _CF_forwarding_prep_0 + 50
5   KBNavigator                         0x0014ff1c -[GXControlWheel controlToData:] + 1292
...
)
terminate called throwing an exception

【问题讨论】:

  • 找到了一个有用的解决方法here,与描述的问题完全相同。
  • 太棒了!,成功了。投票结束此问题为重复...

标签: ios xcode4 sigabrt


【解决方案1】:

调试此类错误的最简单方法是添加一个触发 Objective-C 异常的断点。您可以通过此菜单执行此操作:

(帽子提示Naveen Shan

【讨论】:

    【解决方案2】:

    如果这仅用于调试目的,一种解决方案是简单地在 NSException 中设置一个断点。唯一的问题是处理的异常也会中断,但不会影响代码。

    另一种解决方案是使用NSSetUncaughtExceptionHandler 设置异常处理程序。这只会在未按名称处理异常时触发。

    【讨论】:

      【解决方案3】:

      这对我有什么帮助,我发现 here 与创建 NSZombies 有关

      1. 在 Xcode 4 中转到您的项目
      2. 可以在方案编辑器中设置环境变量(在菜单栏中找到产品 -> 编辑方案...)
      3. 将该变量命名为 NSZombieEnabled 并将其值设置为 YES。
      4. 在调试模式下运行您的应用程序。您可能会收到一条...消息发送到已释放实例...消息,并且调试器会在错误的行处停止。这些信息会导致问题。
      5. 准备就绪后,通过将 YES 更改为 NO 来禁用 NSZombieEnabled。

      【讨论】:

      • 这是针对 EXC_BAD_ACCESS 错误,这是由于使用了任何已经被释放的对象而引起的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2017-07-06
      • 1970-01-01
      • 2016-10-05
      • 2014-01-24
      相关资源
      最近更新 更多