4

我刚来这地方 。抱歉,如果我重复这个问题,但我的问题与其他问题略有不同。

我的应用程序在一定时间间隔后随机崩溃,没有任何错误日志或堆栈跟踪。我怀疑是内存问题。我有以下问题:

1.)如何获取堆栈跟踪(我尝试过启用 NSZombie 和 NSUnacughtExcpetion 处理程序)但没有奏效

2.) 我的应用程序中经常收到内存警告。我如何确认它是否是上述问题的主要嫌疑人?(我使用过 Leaks,我的应用程序在使用 4Mb 时崩溃,所以我不太确定内存泄漏是否导致我的应用程序崩溃。我知道某些应用程序占用的堆内存超过 4MB。)

3.) 在应用程序崩溃之前,iOS 中应用程序的内存泄漏上限是多少?

4.) ARC 在这种情况下会帮助我吗?

此外,我尝试使用 NSLog 语句调试问题,但由于它随机崩溃,我很难使用这种技术检测根本原因。

任何想法或帮助将不胜感激

4

5 回答 5

8

我的应用程序在一定时间间隔后随机崩溃,没有任何错误日志或堆栈跟踪。我怀疑是内存问题。

要确认这是内存问题,请将您的设备与 iTunes 同步,然后查找名称中~/Library/Logs/CrashReporter/MobileDevice/包含的文件LowMemory。如果您(jettisoned)在应用名称旁边看到,则表明它已被 iOS 杀死,因为它使用了过多的内存。

应用程序在不留下崩溃报告的情况下退出的唯一另一种方式是,如果它错误地调用exit()了.

有关详细信息,请参阅“调试已部署的 iOS 应用程序”和“了解和分析 iOS 应用程序崩溃报告”。

于 2012-06-04T22:00:50.630 回答
4

不确定,但阅读寄存器可能会有所帮助。

首先使用左下角的 + 转到异常选项卡并“添加异常断点”。 在此处输入图像描述

然后当应用程序崩溃时,点击线程 1 下的“0 objc_exception_throw” 在此处输入图像描述

最后在控制台输入:

  • 寄存器读取(你应该得到一个寄存器列表)

  • po $rax (通常例外在 'rax' 中)

    (您应该在控制台上看到异常输出)

希望这可以帮助。

于 2014-05-08T12:06:39.690 回答
3

听起来确实可能设备内存不足并关闭了您。stackoverflow 上有很多关于调试内存警告的线程。

这一篇谈到了使用 Instruments 工具时要寻找的内容。

这里解释了如何获得内存警告级别,以及代码的含义。

iPhone 没有固定的内存限制。我已经向 Apple 支持代表询问了这个问题,但他们不会给我一个固定的答案(可能是因为该算法实际上并未对第 3 方应用程序实施任何硬性限制)。

而且,是的,ARC 可以是一件很棒的事情。在您的情况下,您可能需要重新编写大量代码以使其全部符合 ARC,但 ARC 绝对是一个有用的功能,并且可以生成内存问题更少的程序,并且编码人员的工作量更少(让您有更多时间解决其他问题!)

于 2012-06-04T21:10:59.677 回答
0

在我的情况下,我关闭了所有其他应用程序并开始正​​常工作,可能是内存问题

于 2018-05-16T20:13:59.353 回答