我正在使用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目标(同样是设备或模拟器),使用相同的环境运行相同的代码,不会抛出异常。
有什么可能导致这种奇怪行为的线索?
答案 0 :(得分:99)
如评论中所述,您应该通过编辑 All Exceptions 断点来关闭捕获C ++异常。
为此,请右键单击断点并将例外从 所有 更改为 Objective-C 强>:
C ++代码中的异常是普通应用程序功能的一部分。但是,异常断点没有捕获未处理但是每个引发的异常,即使它们稍后被正确处理,因此停止执行。
答案 1 :(得分:31)
<强> TLDR;在我的情况下,问题的原因是缺少字体。
我也有这个问题。虽然@Johnnywho只为Objective-C留下Exception Breakpoint是正确的,但是停止了不需要的行为,它仍然没有解释什么是真正的原因,为什么它在iOS7上毫无例外地运行,为什么只在某些项目上发生。< / p>
这就是为什么我继续解析我遇到这个问题的一个项目,直到我能找到原因。我认为这种行为可能有多个原因,但在我的情况下,缺少自定义字体。
快速测试方法:
启动新的单一视图项目
在所有异常上启用断点,包括C ++(断点/ + /添加异常断点)
将一些自定义字体拖入项目(允许复制并检查目标以将其添加到)
在主视图控制器
选择标签的自定义字体(在Xcode 6+上,一旦将其拖入项目,就应该在字体选择器中显示)。
运行应用程序并确认您在自定义字体中看到标签(似乎我们不需要在Info.plist中添加关键字“应用程序提供的字体”中的字体文件名称,如果自定义字体已在应用程序的xib故事板中使用。)
现在从项目中删除自定义字体(通过取消目标关系或在目标设置中删除它/构建阶段/复制捆绑资源)
从您的设备或SIM卡中删除应用程序(从应用程序包中删除字体文件)
产品/清洁
再次运行应用程序(现在标签仍然具有对自定义字体的引用,但应用程序没有该文件)。如果你在iOS8上运行,你应该注意到这个神秘的异常。
使用iOS7或使用iOS7的SIM卡在设备上运行应用程序(您需要将iOS部署目标更改为iOS7)。虽然标签不会显示自定义字体,但不会有例外。
将字体文件添加回目标,断点不再在运行时停止。
所以我的结论是,在iOS8上,丢失的字体导致C ++异常,而在iOS7上却没有,因此断点触发器。
类似的异常(和断点触发器)也可能是由Info.plist文件中错误编写的字体文件名引起的,其中包含“应用程序提供的字体”键。
答案 2 :(得分:3)
刚刚总结了以前帮助我解决问题的答案。
问题:当您添加自定义字体然后显然删除(替换)它时,项目中的某个地方仍然是他的引用,断点在iOS 8中的主C ++ lib断点停止处停止几次。
解决方案
1)在项目中查找并删除(替换)对这些字体的所有引用。可能会有一些笔尖,子模块等...
2)如果无法在任何地方修复(例如x。只读库使用它们)或解决方案1后问题仍然存在,请将这些旧字体添加回项目
3)忽略它 - 它是C ++ lib所以将断点异常从“All”更改为“Objective-C”
答案 3 :(得分:2)
答案 4 :(得分:0)
我遇到了同样的问题,问题是我添加了一些其他项目中的接口文件,其中包含不同的字体。找到它们然后删除。