iOS只有在不通过XCode运行时才会崩溃。 Concidence?

我的应用程序只在未使用XCodedebugging器运行时崩溃。 很难跟踪,因为我无法debugging,但我终于明白了。 这是因为在某些不属于我的东西上发布了。 在我纠正之前,我search了两个相关的问题(下面的链接)

iOS应用程序在设备上自行运行时崩溃,在使用debugging器运行Xcode时或在模拟器中不会崩溃

iPhone只有当设备没有连接到xcode时崩溃,如何理解崩溃日志?

以上问题都没有回答为什么不通过debugging器运行崩溃。所以我的问题是为什么发生? 我知道debugging/发布特定崩溃的原因,但这是疯狂的。 这是偶然发生的,虽然发生了10次以上。

你所描述的并不是典型的模糊记忆相关的错误。 你可能也想在这样的时候使用debug-malloc。 虽然这不能保证find一切。 原因(可能只要有源代码级别的debugging器),内存的布局至less在debugging代码中有所不同,而且在debugging器下运行。 所以在debugging器下,错误会导致不同的内存被损坏(无害地)。 当不在debugging器下时,被破坏的位置实际上是代码关心的东西,而且会崩溃。

同样的情况也可能发生,但是你永远不会知道 – 如果在运行可debugging的时候崩溃了,你可以在切换到debugging环境外部之前find它。

从[[NSBundle mainBundle] resourcePath]目录之外访问SQLite数据库时,出现此问题,导致了iCloud错误。

我发现错误只有通过安装控制台到我的iPhonelogging错误。

http://itunes.apple.com/us/app/console/id317676250

一旦我从正确的目录访问数据库,错误消失,应用程序启动正确。

当我创build一个NSString的时候,我经历了这个症状,从它发送了一个UTF8String到另一个对象,并且把它分配给一个char指针。 好吧,事实certificate,我忘了保留原来的NSString,这是不重要的,因为我也没有意识到,UTF8String方法(这大概是一个访问指针本身的对象)在autorelease池。 也就是说,保留NSString本身并不能解决问题。

我想这似乎工作得很好,只是因为我有僵尸启用,所以我有的指针仍然是有效的,当附加在debugging器下。 我应该看看这是否是它工作的原因。 如果是这样,这是一个很好的理由来testing启用和不启用NSZombie。

无论如何,这可能是糟糕的devise开始,而且一旦我find了,这是一个非常明显的新手内存pipe理错误。 幸运的是,组织者窗口中的控制台给了我一些关于从哪里开始寻找的提示,debugging最终向我展示了指针的值在哪里变化。 希望这有助于任何人在这里find方法。

我也有这个问题,很幸运,很快找出原因,希望通过张贴在这里我可以拯救别人一些浪费时间。 为了澄清,直接从XCode启动时,我的应用程序运行没有问题,但在iPad上手动启动时会立即崩溃。

有问题的应用程序是用Obj-C编写的,但依赖于用Swift编写的一些第三方代码。 Swift代码作为embedded式框架包含在应用程序中。 我必须在应用程序的生成设置(Build Options)下将“Embedded Content Contains Swift Code”设置为“是”,然后问题就消失了。