【问题标题】:iPhone release build is crashingiPhone 发布版本正在崩溃
【发布时间】:2010-03-30 13:26:38
【问题描述】:

我正在处理的项目在使用发布配置构建时崩溃。

我们需要将应用程序发送给苹果审查,它甚至在进入应用程序之前就崩溃了。

知道这是怎么发生的吗?

最后,是否可以向苹果发送带有一些优化的调试版本的应用程序?

谢谢。

【问题讨论】:

  • 您是否尝试过使用 Xcode 调试器逐步执行您的应用程序?
  • 我无法调试应用程序的发布版本。有办法吗?

标签: iphone release-mode


【解决方案1】:

我在构建我的第一个 iPhone 应用程序时也发生了同样的事情 - 在项目上工作了一段时间后,从调试切换到发布应用程序会崩溃。我对项目进行了完全干净的重建,从测试手机中删除了应用程序并重新安装,应用程序运行了。看起来 XCode 有时不会清理/重建它需要的一切。

【讨论】:

  • 感谢您的建议,也将尝试那个,希望这会像您解释的那样简单。
  • 这可能是真的,但如果根本原因是内存泄漏或其他一些与内存/指针相关的问题,由于内存中的内容对齐,您正在回避这些问题,这也可能是一个红鲱鱼清洁后略有不同。
  • 感谢您的帮助。让它工作起来要困难得多,但现在它正在工作。我做了很多事情,以至于我不知道哪种解决方案实际上效果很好。但由于我没有更改任何代码行,因此我将您的解决方案标记为已接受。
【解决方案2】:

根据我的经验,在 iPhone 或其他任何设备的非调试和调试版本中,10 次中有 9 次令人讨厌且难以追踪的崩溃是由内存管理错误引起的。我会为您的问题投入资金,这些问题是由于发布或保留信息放置不当或缺少信息而引起的。如果您还没有尝试过,请在调试构建配置中打开静态分析器(我的 XCode 正在更新,但我相信如果您在构建属性中搜索“analyzer”或“clang”,您应该会找到合适的设置),看看它是否指向任何说明。如果没有,您可以使用 Instruments 来帮助您检查问题,并尝试在调试器中隔离问题区域。

通过修改调试配置或复制它以使用与发布构建中发生的情况更接近的不同编译器标志集,它可能会帮助您在非实际发布构建中重现问题(我不记得有什么不同之处,但我认为在编译器标志中添加“-O2”可以帮助您实现大部分目标)。

【讨论】:

    【解决方案3】:

    如果您使用发布配置进行构建,请确保保留 .dSYM 文件和应用程序包的副本。

    然后当应用程序在设备上崩溃时,将其插入 Xcode 并下载崩溃报告。

    打开 Xcode,然后从 Xcode 中打开 Organizer。从那里您可以从设备查看崩溃报告。

    当(且仅当)您保存了 .dSYM 文件和应用程序包时,崩溃报告将被符号化。

    然后,您可以使用崩溃报告找出崩溃的原因并进行修复。

    【讨论】:

      【解决方案4】:

      您应该查看您的崩溃日志。打开管理器,选择您的设备,然后选择“崩溃日志”选项卡。向下滚动以查找您的应用程序的日志。应该是符号化的,所以你可以看到堆栈跟踪。

      如果不实际调试您的应用程序,真的很难说更多。你在使用#ifdef DEBUG 宏吗?您是否使用多个线程?如果您有一堆 NSLog 语句会减慢调试模式下的执行速度,这可能会引入细微的时序差异,从而影响多线程应用程序。

      您是否在调试版本上尝试过“make clean”?有时,当您的项目的某些部分被重建而其他部分保持不变时,可能会隐藏一些模糊的错误。

      【讨论】:

      • 将查看崩溃日志。我没有在任何地方使用#ifdef,是的,我有一个多线程程序(但我确保在主线程中进行了任何数据修改)并且线程没有直接通信。
      • 这将有很长的路要走。从辅助线程读取数据时要小心。即使您正在使用 NSLock,或者仅从主线程写入数据,在从辅助线程读取数据时也尽量不要做出假设。例如,在使用之前检查您需要的对象是否确实存在。当您的辅助线程访问它时,主线程可能已经释放了它。这些类型的时序错误可以避免在较慢的调试代码中检测到,但在发布代码中会引起他们的丑陋。 Chris 关于使用下面的静态分析的建议也是合理的建议。
      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2021-03-18
      相关资源
      最近更新 更多