跟踪内存泄漏

Posted

技术标签:

【中文标题】跟踪内存泄漏【英文标题】:Tracing memory leak 【发布时间】:2011-02-21 12:24:14 【问题描述】:

我的可可应用程序中存在内存泄漏,我已尽一切可能找到它的所有者,但一直无法找到。几天前,当我实现 AsyncSocket 框架的 GCD 版本时,泄漏就开始了。我不知道是我自己的代码导致泄漏出现还是库本身。 Instruments 不提供良好的回溯。唯一模糊的一点:

   0 libSystem.B.dylib calloc
   1 CoreFoundation __addHandler2
   2 Foundation +[__NSObserver isAnObserver:]
   3 Foundation -[NSNotificationCenter removeObserver:name:object:]
   4 Foundation -[NSNotificationCenter removeObserver:]
   5 Foundation -[NSRunLoop(NSRunLoop) dealloc]
   6 CoreFoundation CFRelease
   7 CoreFoundation __CFFinalizeRunLoop
   8 libSystem.B.dylib _pthread_tsd_cleanup
   9 libSystem.B.dylib _pthread_exit
  10 libSystem.B.dylib start_wqthread

有人可以为我指出进行更高级跟踪或逆向工程等所需的方向吗?

【问题讨论】:

【参考方案1】:

您是否尝试过对您的应用进行构建和分析?这有助于发现有时可能被忽略的基于分配释放的内存泄漏。您还可以将库与导入项目的源文件一起使用,然后进行构建和分析以对库运行分析。

【讨论】:

【参考方案2】:

如果您的某些对象将自己作为观察者添加到 NSNotificationCenter,请确保在这些对象被释放之前执行 removeObserver:。

【讨论】:

以上是关于跟踪内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

《C语言杂记》内存泄漏跟踪

您如何跟踪应用程序内存泄漏?

检测代码中的 node.js/javascript 内存泄漏

如何从托管 C# 代码跟踪 CRT 调试内存泄漏输出的来源?

使用kbmMW调试内存泄漏

c_cpp 记录deallocs的NSObject类别,在跟踪内存泄漏时非常有用