gpt4 book ai didi

iPhone 应用程序崩溃并且没有留下 .crash 日志文件

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:56 24 4
gpt4 key购买 nike

我正在努力捕捉我的代码中发生的一个非常隐蔽的错误。问题是,该错误完全是随机的,可能会在应用程序运行时 9 分钟或 30 分钟后发生。我已经将出色的 PLCrashReporter 添加到我的项目 ( http://code.google.com/p/plcrashreporter ) 中,这对解决小错误很有效。此外,当我有疑问时,我将导航到 ~/Library/Logs/CrashReporter/MobileDevice/中的崩溃日志,并在崩溃日志上运行 symbolicatecrash。这个 + GDB 最终会捕获任何错误,除了我现在面临的错误。

显然,这个错误的性质甚至阻止了 Apple 的崩溃日志被正确写入存储。当我将我的 iPhone 或 iPod Touch 与 iTunes 同步并在我的应用程序上运行 symbolicatecrash 时显示:

sf$ symbolicatecrash foo.crash 
No crash report version in foo.crash at /usr/local/bin/symbolicatecrash line 741.

可能是我的应用程序根本没有留下崩溃报告,并且由于内存问题而退出。我确实在我的 App Delegate 中看到了 applicationWillTerminate: exiting my NSLog statement before exiting。但是,在通过 ObjectAlloc 运行应用程序之后,我的应用程序从未达到超过 2.08MB 的使用量。尽管如果我正确阅读结果,我确实在整个测试运行期间分配了超过 28MB 的内存。

再次感谢您所做的一切。

最佳答案

一些建议:

  1. 确保您实际上并没有调用 exit()、从 main() 返回或以其他方式干净地退出代码中的任何地方。如果您的应用程序只是退出,而不是崩溃,那显然不会留下日志。

  2. 我认为在内存不足的情况下快速运行系统有时会导致您的应用程序崩溃而不会留下崩溃日志。在 Instruments 下运行它,看看随着时间的推移内存使用情况。

  3. 如果您有一组“经常”重现问题的步骤,请尝试在调试器下运行它并戳它直到它崩溃。这可能是一个半小时的花费。

在消除了明显/容易的部分之后,它进入了更隐蔽的部分。很可能您正在通过缓冲区溢出、重新使用无效指针等方式破坏您的堆或堆栈的某个地方。这里有一些尝试:

  1. 尝试在环境变量中使用 NSZombieEnabled=YES 运行。这将帮助您找到已释放对象的重用。但它确实对内存使用有巨大影响,因此它可能并不适用于所有人。这是 an Apple article处理 NSZombie(以及其他事情)。

  2. 在 iPhone 模拟器中运行时,使用“硬件”菜单中的“模拟内存警告”项强制进入低内存状态 - 这可以清除该代码中的错误,否则这些错误会在不可预测的时间运行。

  3. 最后但同样重要的是,在您的代码中搜索您使用低级 C 内存操作函数的所有地方 - malloc、calloc、realloc、memcpy、strcpy、strncpy 等 - 并绝对确保缓冲区大小合适。

关于iPhone 应用程序崩溃并且没有留下 .crash 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com