Xcode在iOS 8的Main()中抛出一个异常,其中包括'所有异常'断点

时间:2014-09-30 17:51:04

标签: objective-c xcode ios8 xcode6

我正在使用Xcode 6(GM,我没有下载测试版),我正在为iOS 7+开发应用程序。对于我的所有项目,我刚刚打开了我曾经在Xcode 5中工作的相同项目。

在Breakpoint导航器中,我有All Exceptions断点。它设置为Break: On Throw。现在,每次我运行我的应用程序时(无论是在设备上还是在模拟器中),它都会在return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));函数的main()行停止执行。

如果我按Play继续执行程序两次,程序运行正常。所以这并不妨碍我工作,但每次手动播放执行并重置我的编辑器都很烦人。

我喜欢我在Xcode中设置的行为(将当前编辑器带到执行暂停的位置),并且All Exceptions断点是重要的IMO。 (所以我不想改变那些)

对于iOS 7目标(同样是设备或模拟器),使用相同的环境运行相同的代码,不会抛出异常。

有什么可能导致这种奇怪行为的线索?

5 个答案:

答案 0 :(得分:99)

如评论中所述,您应该通过编辑 All Exceptions 断点来关闭捕获C ++异常。

为此,请右键单击断点并将例外 所有 更改为 Objective-C

change All to Objective-C

C ++代码中的异常是普通应用程序功能的一部分。但是,异常断点没有捕获未处理但是每个引发的异常,即使它们稍后被正确处理,因此停止执行。

答案 1 :(得分:31)

<强> TLDR;在我的情况下,问题的原因是缺少字体。

我也有这个问题。虽然@Johnnywho只为Objective-C留下Exception Breakpoint是正确的,但是停止了不需要的行为,它仍然没有解释什么是真正的原因,为什么它在iOS7上毫无例外地运行,为什么只在某些项目上发生。< / p>

这就是为什么我继续解析我遇到这个问题的一个项目,直到我能找到原因。我认为这种行为可能有多个原因,但在我的情况下,缺少自定义字体。

快速测试方法:

  1. 启动新的单一视图项目

  2. 在所有异常上启用断点,包括C ++(断点/ + /添加异常断点)

  3. 将一些自定义字体拖入项目(允许复制并检查目标以将其添加到)

  4. 在主视图控制器

  5. 中为视图添加标签
  6. 选择标签的自定义字体(在Xcode 6+上,一旦将其拖入项目,就应该在字体选择器中显示)。

  7. 运行应用程序并确认您在自定义字体中看到标签(似乎我们不需要在Info.plist中添加关键字“应用程序提供的字体”中的字体文件名称,如果自定义字体已在应用程序的xib故事板中使用。)

  8. 现在从项目中删除自定义字体(通过取消目标关系或在目标设置中删除它/构建阶段/复制捆绑资源)

  9. 从您的设备或SIM卡中删除应用程序(从应用程序包中删除字体文件)

  10. 产品/清洁

  11. 再次运行应用程序(现在标签仍然具有对自定义字体的引用,但应用程序没有该文件)。如果你在iOS8上运行,你应该注意到这个神秘的异常。

  12. 使用iOS7或使用iOS7的SIM卡在设备上运行应用程序(您需要将iOS部署目标更改为iOS7)。虽然标签不会显示自定义字体,但不会有例外。

  13. 将字体文件添加回目标,断点不再在运行时停止。

  14. 所以我的结论是,在iOS8上,丢失的字体导致C ++异常,而在iOS7上却没有,因此断点触发器。

    类似的异常(和断点触发器)也可能是由Info.plist文件中错误编写的字体文件名引起的,其中包含“应用程序提供的字体”键。

答案 2 :(得分:3)

刚刚总结了以前帮助我解决问题的答案。

问题:当您添加自定义字体然后显然删除(替换)它时,项目中的某个地方仍然是他的引用,断点在iOS 8中的主C ++ lib断点停止处停止几次。

解决方案

1)在项目中查找并删除(替换)对这些字体的所有引用。可能会有一些笔尖,子模块等...

2)如果无法在任何地方修复(例如x。只读库使用它们)或解决方案1后问题仍然存在,请将这些旧字体添加回项目

3)忽略它 - 它是C ++ lib所以将断点异常从“All”更改为“Objective-C”

答案 3 :(得分:2)

Xcode 9,有时会抛出异常,但iOS正在优雅地捕捉它。这将有助于

enter image description here

enter image description here

source

就我而言,它是nib中用户定义的属性

答案 4 :(得分:0)

我遇到了同样的问题,问题是我添加了一些其他项目中的接口文件,其中包含不同的字体。找到它们然后删除。