8

请帮助我追踪 iOS 内存泄漏。谢谢!

我正在使用 xCode 4.0.1 并尝试激活 NSZombie 以跟踪内存泄漏,但它似乎不像以前那样工作,使用 xCode 3.x

正如 Instruments 指出的那样,我无法找出内存泄漏的来源:

泄漏对象 -> GeneralBlock-32 地址 -> 0x4c8600 大小 -> 32 字节 负责库 -> libsystem_c.dylib 负责框架/调用者 -> strup

在这一点上,我不知道我是否在 xCode 4 中以正确的方式使用带有 NSZombie 的Instruments ,因为当我在左侧选项Leaks下单击“i”以获取更多信息时,它不会显示 NSZombie 选项。

观察:我的 iPhone 应用程序在有限的时间内播放实时流 mms/wma 和 wma áudio 文件。泄漏发生在有限的 wma 文件中,但当我从流式源播放时运行完美,没有结束时间。

4

2 回答 2

10

首先,这是一个malloc块,而不是一个对象。僵尸不会工作(并且在以前的版本中也不会工作)。

这种泄漏发生了多少次?一次?别担心。每个流一次?提交一个错误——到目前为止你发布的代码中没有这个错误(除非你的代码正在调用strdup,这当然是可能的,但在大多数没有大量使用第三方库的 iOS 应用程序中是非典型的......你是?)

在任何情况下,除非它在您的应用程序运行时泄漏 100 和 100 次 32 字节分配,否则不要担心(但请提交错误)。

正如 Valkio 所说,您可以直接从 gdb(或 Instruments)获取分配的堆栈跟踪。

于 2011-05-05T15:23:54.730 回答
5

如果你这样做,你可以看到它被分配到哪里:

  1. 转到产品-> 编辑方案-> 运行(调试)-> 参数。
  2. 将此添加到环境变量中:MallocStackLoggingNoCompact
  3. 将其设置为
  4. 运行,让它崩溃。
  5. 输入控制台 (gdb) info malloc 0x4c8600或任何地址。
于 2011-05-05T15:18:18.143 回答