【问题标题】:iphone/ipad troubleshooting device crashes due to memoryiphone/ipad故障排除设备因内存崩溃
【发布时间】:2011-05-02 01:05:45
【问题描述】:

我有一个应用程序经常在设备 (iPad) 上崩溃,但在模拟器上却没有,因此任何模拟器调试策略(例如 MallocStackLogging)都不是一个选项。我通常在控制台中得到的是这样的:

Received memory warning. Level=1
Received memory warning. Level=2
Program received signal:  “0”.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")

我的问题是,在这一点上,我可以做些什么来找出导致崩溃的确切原因吗?显然这是一个内存问题,但我很难找到原因。是泄漏吗?分配太多?除了“使用性能工具运行 > 泄漏”之外,我还能做些什么来追踪问题?

【问题讨论】:

  • 为什么不想使用泄漏工具?毕竟这就是它的用途。
  • 我正在使用泄漏工具。我的问题是是否有任何其他解决内存问题的方法。还是 Leaks 可以检测并显示所有可能的内存问题?
  • 不,Leaks 不会检测到所有可能的内存问题。它会标记一些常见问题,但仅此而已。使用 Allocations 了解全局。

标签: iphone ipad memory-leaks memory-management


【解决方案1】:

另一个很好的工具是静态分析器。只需单击 Build 菜单中的 Build and Analyze,它就会显示您的许多和大部分内存泄漏之间的某个位置。

查看Apple Developer Document,了解有关如何阅读结果的更多说明。

【讨论】:

    【解决方案2】:

    使用 Instruments 查看所有内存的去向。

    我将从 Run with Performance Tool -> Allocations 开始。

    另外,我发现 Leaks 相当保守。我没有从 Leaks 中看到一个误报,但我发现了很多 Leaks 没有检测到的泄漏。

    【讨论】:

    • 那么我在分配中寻找什么?它因以下统计数据而崩溃:实时字节:23.13 MB,#Living:85455,#Transitory:3856520,总字节:475.43 MB,总:3941975。这些有什么不好吗?似乎它徘徊在 24-25MB 的 Live Bytes 左右,而没有崩溃一段时间。
    • 首先,确保您在在设备上发布中执行此操作。观看实时字节。 25MB 非常接近最大值。您可能想深入了解并找出使用所有内存的内容。
    • 当 Live 字节只有 10 MB 左右时,为什么会收到内存不足警告?我可以说我收到了警告,因为 viewDidUnload 在某些视图控制器上被调用。
    • 设备 内存不足时,您会收到警告。在 iOS 4 中,其他应用程序可能仍在使用内存。或者您的应用程序已经(间接)让操作系统缓存了一些项目(图像)。如果您的应用程序没有被弹出,我不会担心 just 警告。当它被弹出时,你会得到一个内存不足的崩溃日志,告诉你你的应用程序真正使用了多少页(每个 4K)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2010-10-17
    • 2013-12-20
    • 2018-08-14
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多