2010-07-25 173 views
5

我有一个程序在Debug配置中的设备上运行良好,但作为发布失败。任何人都有这种经历,我该如何解决?应用程序作为调试运行,但崩溃作为版本

THX

+0

你应该看到我对这个问题的回答,并且它会(给出)你正在寻找的答案:http://stackoverflow.com/questions/3261557/why-is-windows-phone- 7-emulator-so-slow-versus-um-iphone-os-emulator/3261644#3261644 – 2010-07-25 04:16:51

+0

我已经看过它,但它没有帮助。我提到的两个版本都在设备上运行,而不是在模拟器中运行。在模拟器中一切都很完美。 – 2010-07-25 04:44:58

+0

我在这一点上得到:它们都不同,这就是它失败的原因。 – 2010-07-25 04:48:23

回答

1

一些

线索!

“失败”是什么意思?崩溃?挂? Jettisoned用于内存使用?失败的症状是什么?有回溯?你的代码中的任何东西在调试与发布时的行为都不相同?任何#ifdef DEBUG类型shenanigans? asserts有副作用吗?你搞乱了编译器设置吗?有C++吗?部件?

我在评论中看到一丝线索,非法访问变量。最有可能的是,这是由于优化器在释放中比在调试中更快地重新使用堆栈槽所引起的。这通常归结为过度释放问题。

即使构建版本,您仍然可以启用僵尸检测。

另外,你做了一个构建和分析并修复它表明的任何问题吗?

15

我遇到了同样的问题 - 应用工作在调试模式模拟器和设备很好,但无论是在释放模式(它会安装,但只显示启动画面)

  • 的Xcode 4.3.2
  • iOS的部署目标4.3

我不断看到StackOverflow上认为这是一个内存管理问题的答案,但没有任何意义,我自从装到我的iPhone 4S时的调试版本的工作完全正常。我还检查了构建设置以查看两种模式之间的差异,并跳过了最终编译器优化中的一个差异。

在Build设置 - >下苹果LLVM编译器3.1的代码生成 - >优化级别,改变释放从默认最快,最小[-Os]无[-O0]设置。解决了我的问题。

在本博客文章中发现解决方案:http://www.mindjuice.net/2011/11/30/how-to-fix-an-app-that-crashes-in-release-but-not-debug/

Apple Documentation帮助,但并不能解释为什么这样做正好相反修复的东西:

任何结果的代码优化较慢的建立,因为涉及在优化过程中的额外工作的时间。如果您的代码正在改变,就像在开发周期中一样,您不希望启用优化。但是,当您接近开发周期结束时,发布版本配置可以为您提供成品尺寸的指示,因此最快,最小的选项是适当的。

无:编译器不会尝试优化代码。当您专注于解决逻辑错误并需要快速编译时时,请在开发过程中使用此选项。不要使用此选项来运送您的可执行文件。

最快,最小:编译器执行通常不会增加代码大小的所有优化。这是运送代码的首选选项,因为它为您的可执行文件提供了更小的内存占用空间。

+0

您引用的文档说'不要使用此选项[无]运送您的可执行文件'。但是,你做了什么? – 2015-07-12 00:13:03

相关问题